Skip to content
阅读进度

Socket 为什么会出现粘包和拆包? ​

返回 网络与设备通信 目录

标准回答 ​

TCP 提供有序可靠字节流,但一次 send 不对应一次 read。接收方必须用长度字段、分隔符或固定长度等协议规则还原完整消息。

关键机制 ​

  • 常见帧结构:魔数、版本、消息类型、请求编号、长度、负载、校验字段;根据产品需要裁剪。
  • 读取时先放入缓冲区,够一个包再解析;不够继续等,多出来的部分留给下一个包。必须限制声明长度。
  • 心跳检查应用层存活;断线重连用退避并设置上限;重发命令要靠请求编号和幂等控制重复执行。

通俗例子 ​

设备发两条温度消息,手机一次 read 可能读到一条半。先解析完整的一条,把剩余半条保留,等下次字节到达再拼。

易混淆点 ​

TCP 确认表示传输层可靠接收,不等于远端业务已经执行;需要业务 ACK 才能确认命令结果。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。