golang中tcp socket粘包问题和处理

陈杰斌 ·
这种场景不适合使用json.NewDecoder,如果一个协议包(假定是json数据),协议栈只收到了一部分怎么办?你直接decode失败就return了?原文的length + data是一种很好的方式,当然加上header也是可以的。
#2
更多评论
polaris
社区,需要你我一同完善!
补充:对于 json 格式数据传输,可以通过 json 包来处理,go 的 json 包已经处理好了 粘包 问题 ```go func handleConnection(conn net.Conn) { d := json.NewDecoder(conn) for { var msg interface{} if err := d.Decode(&msg); err != nil { log.Println(conn.RemoteAddr().String(), " connection error: ", err) return } log.Println(conn.RemoteAddr().String(), "receive data:", msg) } } ```
#1
polaris
社区,需要你我一同完善!
据说 json 包做了这种情况的处理,具体没有深究
#3