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),十分简单
推荐阅读
- 续航|单次最大续航里程420km ID.3创连续行驶世界纪录
- 网通社|喜欢蔚来的越来越多了 连续四个月交付创新高 你是否愿意放弃特斯拉选择它?
- 子李汽车|未来可期 东风雪铁龙11月环比增长33%,连续三月正增长
- 隐秘而伟大|连续19天拿冠军,这剧凭什么能让央视“引以为傲”?
- 趣头条|连续4个月销量超2万辆 红旗汽车有望完成20万年销量目标
- |南通市天然气供应再创新高
- 汽车舆生活|又一国产车彻底倒下了!连续9个月销量为0,难道是国人不识货吗?
- 这个大叔太暖了!高校保安连续14天接送骨折女生上课
- 燃气|连续三天突破100万方!我市天然气供应再创新高
- 跟我视驾|连续漂移210圈,保时捷Taycan创电动车吉尼斯世界纪录