netty 接收到的数据偶尔不完整?

2023-06-13 11:38:05 +08:00
 furaoo

最近在用 netty 开发服务器端,与 4g 设备进行通讯,但是遇到了接收报文偶尔出现不完整的情况, 如下红色方框,每 10 次问询,就会出现一次报文接收不完整的情况。出问题的报文被截断了。(非红框的日志打印的报文长度都正常) 但报文的长度是一样的。也就是说出问题的报文执行了 2 次 channelRead 方法,然后才执行 channelReadComplete 打印 信息接收完毕..... 。请教一下各位这方面的大佬,这是 tcp 拆包问题吗?

这是我的 netty 配置: netty 启动类

这是自定义 ChannelInitializer 类

这是自定义报文处理类

2560 次点击
所在节点    程序员
25 条回复
furaoo
2023-06-13 15:26:04 +08:00
@Shazoo 报文里确实有 crc 校验,最后 4 字符就是
xFrye
2023-06-13 15:54:30 +08:00
看到标题我就猜到帖子回复是啥了哈哈哈哈
julyclyde
2023-06-13 16:47:33 +08:00
首先就是不要用“报文”这个词。就因为基础认知的错误,才导致后面的编程错误
TCP 是流!
TCP 是流!
TCP 是流!

你需要定义长度或者定界符来从流里面找到一个完整的消息
lmq2582609
2023-06-14 08:57:55 +08:00
TCP 流数据传输会出现上一条消息和下一条消息粘在一起的情况,这是正常的,netty 有提供多种处理这种问题的方式,比较推荐的是“基于长度分割”和“基于关键字符分割”的方式去处理。
258
2023-06-19 16:59:34 +08:00
盲猜粘包问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/948273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX