问题背景:
利用TCP协议传输json格式数据,json格式数据是以大括号 {} 开始和结束的,(此处当然也可以是其他格式的数据),会产生粘包问题,粘包的现象是每次发送的数据要么不完整、要么冗余,由于json格式的数据解析对格式要求非常严格,必须是单个完整的json字符串,多一点都不行。所以解决粘包带来的问题是必须的。
解决方法:
-
发送端:在每个json字符串的开头,添加一个报头,报头中隐藏着该json字符串的长度;
-
接收端:设立一个缓存区,将接收到的数据全部存到缓存区中,利用缓存区的size和json字符串的size大小比较,确定到底要不要从缓存区中读取一个json,之后更新缓存区。
清晰图解:
关键代码
tmpArray1.append(array); //向缓存区中 存 的动作
QByteArray sizeData; //报头
sizeData = tmpArray1.