/hw09

Primary LanguageGo

Socket粘包

  1. 粘包的概念
  • 粘包问题是指当发送两条消息时,比如发送了 ABC 和 DEF,但另一端接收到的却是 ABCD,像这种一次性读取了两条数据的情况就叫做粘包(正常情况应该是一条一条读取的)。
  1. 导致的原因
  • 发送方每次写入数据 < 套接字(Socket)缓冲区大小;
  • 接收方读取套接字(Socket)缓冲区数据不够及时。
  1. 解决方法
  • 方式1: fix length 发送方,每次发送固定长度的数据,并且不超过缓冲区,接受方每次按固定长度区接受数据
  • 方式2: delimiter based 发送方,在数据包添加特殊的分隔符,用来标记数据包边界
  • 方式3: length field based 发送方,在消息数据包头添加包长度信息