粘包和半包

  在网络传输过程中粘包和半包中经常出现的现象。

  在TCP传输中,客户端发送消息时,实际上是将数据写入TCP的缓存,此时数据的大小和缓存的大小就会造成粘包和半包的原因。

  例如:

  客户端给服务端发送了两条消息ABCDEF,服务端这边的接收会有多少种情况呢?有可能是一次性收到了所有的消息ABCDEF,有可能是收到了三条消息ABCDEF

上面所说的一次性收到了所有的消息ABCDEF,类似于粘包,收到三条消息的类似于半包

 

  由此可见当数据超过TCP缓存容量时,这个数据会被拆分成多个包,通过socket多次发送到服务端,服务端每次从缓存中取数据 就会造成半包的问题。

  当数据小于TCP容量时,TCP缓存中可以存放多个包,那个客户端和服务端一次通信就可能传递多个包,这时候服务端就可能一次读取多个包,产生粘包的问题

 

posted @ 2020-02-15 19:47  以梦为码  阅读(876)  评论(0编辑  收藏  举报