粘包问题解决--待续

本文通过实际案例探讨了TCP粘包现象的成因与解决方案。文章指出,粘包并非单纯由网络延迟引起,而是与接收端缓冲区管理密切相关。通过调整接收端睡眠机制,成功解决了粘包问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试的时候select接受数据

aa055e

800101
8f0101
8310b6e3310c46afdd7f0d416ab890e93a92
840431323030
850e3230313631323135313532323530
3d5c8beae1afe49f9019869d2a31f93e914d858b5d0ec7206e423520008bc1d798b0875aa9071c2b04412c03f98a373d

aa05069f04706f6e67


最后一个aa是下一条数据的开头,以为发生了粘包问题,

先解决接收端(c),加了setsockopt,禁用nagle算法(参考nginx)。然而还是会粘包。。

然后修改服务端(netty)加了.option(ChannelOption.TCP_NODELAY, true),然而还是会粘包。


后来考虑这不是粘包问题,而是缓冲区没有flush。考虑了服务端是write and flush,应该不存在问题。

考虑接收端(c)发现read()前有sleep,故注释掉,问题解决。。


待续:粘包到底是什么效果? 为什么tcp的缓冲区到底是怎么样的? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值