粘包的原因分析及解决

1 粘包的原因分析

先看一下数据收发的示意图:
粘包的原因分析及解决
我们之前每次只处理一帧数据,如果接收端的处理速度力和发送端的发送速度不匹配就会导致接收缓冲区满的情况,这种情况下就会出现缓冲区溢出的情况,导致网络阻塞。在实际的测试中,发现程序直接卡死,原因暂时无法得知!

我们这个时候就需要引入第二缓冲区,我们每次不再读取一帧的数据长度,而是尽可能的将缓冲区的数据都进行读取。在这种情况下,有可能出现粘包、少包的情况。我们就需要对粘包和少包进行处理。


2 客户端解决粘包的问题


3 服务端解决粘包的问题


参考资料:

  1. C++ 百万并发网络通信引擎架构与实现 (服务端、客户端、跨平台) Version 1.0