golang中tcp socket粘包问题和处理

陈杰斌 ·
不是据说,数据不全的话返回的err一定不为nil,总之json.NewDecoder不适合这种需要等待数据到来的场景
#4
更多评论
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
这种场景不适合使用json.NewDecoder,如果一个协议包(假定是json数据),协议栈只收到了一部分怎么办?你直接decode失败就return了?原文的length + data是一种很好的方式,当然加上header也是可以的。
#2