golang下tcp 连续两次write导致server端无法读到第二次write的报文内容问题

TCP本质上是一个可靠的字节流,你在接收端不能保证发送端的两次发送也会分两次收到,它有可能是1次收完,有可能2次收完,有可能是100次收完。所以必须处理好粘包问题。处理粘包问题最简单的方法就是用 长度+负载 的方式发送数据。这样接收端先读取固定字节的长度,然后根据负载长度再读取特定长度的负载真实数据。
给你一个我最近刚写的 Packet 发送接收代码做参考:
https://github.com/xiaonanln/goworld/blob/master/engine/netutil/PacketConnection.go

■网友
TCP是可靠的协议,不会存在第二次收不到的情况。没详细看你的代码,不过对于处理TCP协议,自己封包、解包、处理粘包,建议你看一下两个开源项目的代码:
(nsqio/nsq) nsqd接收producer发送的消息
(flike/kingshard) kingshard处理mysql协议

【golang下tcp 连续两次write导致server端无法读到第二次write的报文内容问题】 这两类tcp读写的方式,基本上普通项目都够用了,只需要自己定义协议即可,协议的指定也可以看(TCP Protocol Spec),十分简单


    推荐阅读