TCP粘包问题解决

出现粘包的情况如下:

比如你一次性接收固定 BUF 大小的数据(比如1024字节) 尤其是在处理 iocp 接收数据的时候,
发送端的一个数据包可能没有1024字节大小,比方说发送聊天内容,一个聊天内容即一个数据包,1024字节就可能包含很多个
数据包,第二次接收固定BUF大小的数据的时候,就可能会出现了粘包,半包问题! ==》 这种情况就必须要做粘包,半包处理了!!

该固定BUF缓存最后一个数据包可能结构如下:
1. 只包含了部分包头,余下包头及全部包体在下一次接收的固定BUF缓存中首部
2.刚好包含了完整包头,包体在下一次接收的固定BUF缓存中首部
3. 包含了全部包头及部分包体,余下包体在下一次接收的固定BUF缓存中首部

(让以上粘包,半包问题出现很容易,服务器在命令行模式下,按住cmd.exe滚动条,客户端依然在不断的发送数据)

避免粘包问题的方法思路其实很简单:

接收端线性接收数据,保证先读包头(sizeof( packet_header_t)) 大小的数据,并验证校验和,然后再根据包头里包含的
包体数据大小,接收指定长度的数据, 以此接收方式循环.....
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值