当前位置: 首页 > 知识库问答 >
问题:

带字符串验证的ByteBuf数据包大小?

谢奕
2023-03-14

每个包作为操作码,操作码用于知道它是什么类型的包,例如操作码2是登录包。

所以登录包有一个操作码和两个字符串。例如,用户名最大长度为18,密码最大长度为12,因此登录数据包的大小必须为31。

但是当用户名小于18时会发生什么呢?如果我的密码是10,用户名是4,我的数据包大小将是15,根据系统检查将是非法的。

它在做什么?应该如何做?

共有1个答案

卫皓
2023-03-14

TCP是一种基于流的协议。这意味着传入字节单元的长度不能与写端数据包的长度相关。有不同的方法来解决这个问题,最简单的方法是给你的包附加一个长度。您可以使用自己的自定义处理程序,或者使用已经内置到Netty中的处理程序。下面的示例向您展示了此配置的管道:

channelPipeline.addLast("framer", new LengthFieldBasedFrameDecoder(Short.MAX_VALUE,0,2,0,2));
channelPipeline.addLast("framer-prepender", new LengthFieldPrepender(2, false));

LengthFieldBasedFrameDecoder的参数为:

  • 最大帧长度
  • 帧长度接收数据时的偏移量
  • 长度字段的长度(以字节为单位)
  • 要从接收到的消息中删除的字节
    null
 类似资料:
  • 我有一个电子邮件地址字段,其中有一个客户端验证,不允许几个临时域,如tempmailder.com或dispostable.com. 在服务器端,我使用了fluent验证来指定验证规则。 web中不允许的临时域。将文件配置为逗号分隔的字符串。 我是否可以指定一种方法来验证用户根据不允许的电子邮件域列表输入的值。 谢啦

  • @target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})@retention(value=runtime)@documented@constraint(validatedby={})public@interface Min 带注释的元素必须是一个数值,该数值必须大于或等于指定的最小值。 支持的类型有: 注意,由于舍入错误

  • 在catch块中,如果有人输入一个字符串或一个小于13或大于16的数字,我想打印输入有效的卡片no。

  • 问题内容: 我很难找到最简单的方法来针对给定的JSON模式字符串验证JSON字符串(作为参考,这是在Java中运行在Android应用程序中)。 理想情况下,我只想传入JSON字符串和JSON模式字符串,并且它返回关于是否通过验证的布尔值。通过搜索,我发现了以下两个有前途的库可以完成此任务: http://jsontools.berlios.de/ https://github.com/fge/j

  • 问题内容: 我正在尝试验证我的字符串是否与模式匹配。也就是说,完整的字符串可以写为该模式。但是,如果有任何子字符串匹配该模式,则返回。(如回报,这是我不想在这个例子中,我宁愿验证,整个字符串只含有少量拉丁字母)。 问题答案: 您可以使用 开始 和 结束 标记,并分别指示开始,在您的正则表达式模式的字符串的结尾。这样,您可以使表达式仅匹配整个字符串,而不匹配任何子字符串。在您的情况下,它将如下所示:

  • 我的Java应用程序“A”正在从另一个Java应用程序获取移动电话号码作为字符串。因此,在应用程序A获得手机号码字符串后,我需要验证该手机号码字符串中是否只有数字。为了验证我使用了如下的简单逻辑, 我正在检查I=1,因为国家代码的第一个字符将是“”。这种方法是O(n)。还有另一种方法,我们可以使用。这将抛出<代码> No.MultFrimeExtry,以便我们可以捕获并考虑它是一个字母数字字符串。