TCP通信传输数据粘包问题及解决方法

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:

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

TCP粘包的现象

解决方法:

  • 发送端:在每个json字符串的开头,添加一个报头,报头中隐藏着该json字符串的长度;

  • 接收端:设立一个缓存区,将接收到的数据全部存到缓存区中,利用缓存区的size和json字符串的size大小比较,确定到底要不要从缓存区中读取一个json,之后更新缓存区。

清晰图解:

发送端发送的实际数据,包含报头

接收端设立缓存区

关键代码

tmpArray1.append(array); //向缓存区中 存 的动作

            QByteArray sizeData;  //报头
            sizeData = tmpArray1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值