现在用golang tcp 进行接收数据。数据格式:{"xx":"xx"} 标准的josn但是现在有以下情况出现 出现半包情况 第一次收到数据
{"xx":"xx"}{"xx"
第二次读到
:"xx"}{"xx":"xx"}
以上情况如何进行准确的拆包呢?(现在已经无法更改数据协议 只能按照这种)
基于 TCP 的报文啥时候算结束不得你们自己约定么?
比如 HTTP,也是基于 TCP 的,它会在某一行读到 Content-Length,这个值就是预计的报文总长度,然后读这么多以后就认为所有 TCP 包都收到了,按顺序拼接到一起,就是一个完整的 HTTP 报文。
Content-Length
你们在设计报文协议的时候也得有一个机制,好让对方知道啥时候算发完了。
P.S. 主流的基于 TCP 的协议都会不约而同地有头和正文的概念,比如 HTTP、SSH、gRPC、dubbo 等等,你可以思考一下为什么。你这里的只有正文,而没了头。
548k questions
547k answers
4 comments
86.3k users