问题背景:
利用TCP协议传输json格式数据,json格式数据是以大括号 {} 开始和结束的,(此处当然也可以是其他格式的数据),会产生粘包问题,粘包的现象是每次发送的数据要么不完整、要么冗余,由于json格式的数据解析对格式要求非常严格,必须是单个完整的json字符串,多一点都不行。所以解决粘包带来的问题是必须的。

解决方法:
-
发送端:在每个json字符串的开头,添加一个报头,报头中隐藏着该json字符串的长度;
-
接收端:设立一个缓存区,将接收到的数据全部存到缓存区中,利用缓存区的size和json字符串的size大小比较,确定到底要不要从缓存区中读取一个json,之后更新缓存区。
清晰图解:


关键代码
tmpArray1.append(array); //向缓存区中 存 的动作
QByteArray sizeData; //报头
sizeData = tmpArray1.

在TCP协议传输JSON数据时遇到粘包问题,表现为数据不完整或冗余。解决方案是在每个JSON字符串前添加包含长度的报头,接收端通过缓存区和报头判断何时读取完整JSON。该方法确保了数据正确解析。
最低0.47元/天 解锁文章
4628

被折叠的 条评论
为什么被折叠?



