Socket通讯中的粘包问题及处理方案

                                                Socket通讯中的粘包问题及处理方案

1、TCP提供的是一种面向连接的,可靠的字节流服务,没有消息边界,所以会产生粘包问题。

当出现如下情况时会出现粘包情况:

1、当应用程序发送缓冲区大于套接口发送缓冲区。

2、由TCP传递给IP的报文段大于MSS时。

3、当网络层向网络接口层发送的数据包大小超过MTU

 

例如:两个主机HostA和HostB,主机A向主机B发送M1和M2两个数据包。则主机B接收数据包时出现的如下情况:

情况一:M1和M2,分别接收完.

情况二:M1和M2一次性接收完.

情况三:先接收M1和M2的一部分M2_1,再接收M2的另一部分M2_2.

情况四:先接收M1的一部分M1_1,再接收M1的另一部分M1_2.和M2

情况。。。。。

 

2、粘包的解决方案

本质上是要在应用层维护消息与消息的边界


方式一:定长包。有可能增加了网络的负担,例如:如果定义的发送缓冲区是100个字节,而要发送的数据是10个字节,则每次都   得发送100个字节。


方式二:包尾加\r\n(ftp)。如果数据包中含有\r、\n,则需要进行转义等操作。


方式三:非定长的数据包。即包头加上包体长度,这样可以先接收包头(含有数据包长度),再接收包体,有效的降低了网络的负担
方式四:更复杂的应用层协议。


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值