Tcp通信中会出现粘包的情况,Tcp数据不是完全一收一发,而是会将接收到数据存在一个接收缓冲区,等到调用接收的把数据从缓冲区取出来

大部分时候,我们收发消息频率不高,看上去就是发一条,收一条,完整数据;理论上,接收一次,是会出现各种情况,

粘包的几种情况

  1. 接收不完整一条数据,多次接收
  2. 接收到2条(或者N条)连在一起的数据
  3. 接收到1条(或者N条)完整加一条不完整的数据

示例:

比如 modbustcp响应报文,我们查询三次,正常是收到三条下面这样报文

1

00 01 00 00 00 05 FF 01 02 0A 02

2

00 01 00 00 00 05 FF 01 02 0A 02

3

00 01 00 00 00 05 FF 01 02 0A 02

情况1:不完整报文

每条都分开几次收到

1

00 01 00 00 00 05

FF 01 02 0A 02

2

00 01 00 00

00 05 FF 01 02 0A 02

3

00 01 00 00 00 05

FF 01 02

0A 02

情况2:粘连

07-27 17:09