golang中tcp socket粘包问题和处理

陈杰斌 ·
http://golang.org/pkg/encoding/json/ 你看看官方文档的示例吧,只要流没有结束,就可以继续读,除非出现违反json编码规范的情况,否则不需要返回错误。json本来就是带结构的,所以粘包对json来说不成问题
#6
更多评论
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