Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.8k views
in Technique[技术] by (71.8m points)

tcp拆包问题求高手指点下非常感谢。

现在用golang tcp 进行接收数据。
数据格式:{"xx":"xx"} 标准的josn
但是现在有以下情况出现 出现半包情况
第一次收到数据

{"xx":"xx"}{"xx"

第二次读到

:"xx"}{"xx":"xx"}

以上情况如何进行准确的拆包呢?
(现在已经无法更改数据协议 只能按照这种)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

基于 TCP 的报文啥时候算结束不得你们自己约定么?

比如 HTTP,也是基于 TCP 的,它会在某一行读到 Content-Length,这个值就是预计的报文总长度,然后读这么多以后就认为所有 TCP 包都收到了,按顺序拼接到一起,就是一个完整的 HTTP 报文。

你们在设计报文协议的时候也得有一个机制,好让对方知道啥时候算发完了。

P.S. 主流的基于 TCP 的协议都会不约而同地有正文的概念,比如 HTTP、SSH、gRPC、dubbo 等等,你可以思考一下为什么。你这里的只有正文,而没了头。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...