关于tcp粘包的处理

tcp流没有界限,就会出现所谓的粘包。一般处理粘包问题的有三种方法:

1、包固定长度。

2、使用标志位区分包与包之间的连接

3、发送包之前,先发送包长度(包长度为固定字节)

方法1:每次发送都发送固定长度的包,如果最大包和最小包之间差别太大,降低了网络发送效率。

方法2:使用标志位区分包与包之间的连接,就需要对包的内容进行分析,对包内容中和标志位一样的数据进行一些特殊处理,影响应用程序的效率

方法3:发送包之前发送固定字节的长度。避免了以上两种问题。

但是方法1和方法3都存在一个隐患,虽然说几率很小,但是如果收到其中一个包长度不对,那么后面所有的包都不对。对这个,我想了一个方法,方法2和方法3的组合,包结构为 包长度+包内容+标志位(不需要处理包内容中和标志位一样的数据) 读完包的时候判断下,标志位对不对,如果不对,可以进行两个处理,清空这个socket在应用程序中的缓存 或者是找到这个标志位在缓存中的位置,清空标志位以前的缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值