TCP 粘包问题解决
kelvin 发布于 2022-06-12
上篇文章关于TCP send超时的问题,其实最终原因还是因为TCP粘包问题导致接收结束条件判断错误,因为服务端已经结束while循环,不再可能执行recv函数,所以客户端的send就一直卡住了,设置超时其实也不是解决问题的办法。后面了解了TCP粘包的处理方案,有以下几种方式,
1、send端和recv端的缓冲区大小设置一样,发送的大小和接收的长度也设置为缓冲区大小。这种方式如果发送的内容不够缓冲区大小,需要补充一些字符,recv端接收后对于补充的字符串进行过滤,否则也会粘包
2、send的内容不够缓冲区大小时结尾补充一个特殊符号,这种情况测试过也可能粘包,
3、增加头部描述,这种方式就是大部分协议的方式,固定包头大小,包头描述内容长度,这样recv接收到数据要进行解析,对数据进行处理,这样就不怕粘包了,虽然增加了头部,多了处理环节,但节省了补充字符,从根本上解决粘包的问题。
关注 私信
文章
92
关注
0
粉丝
0