通化市网站建设_网站建设公司_C#_seo优化
2025/12/29 2:40:59 网站建设 项目流程

记录Qt的UDP通信丢包问题

  • 记录Qt的UDP通信丢包问题
    • 1 问题
    • 2 问题可能原因
      • 2.1 接收数据后处理太慢(排除)
      • 2.2 接收缓冲区太小(原因所在)
    • 3 问题解决:使用socket不用Qt的QUdpSocket设置缓冲区。

记录Qt的UDP通信丢包问题

1 问题

设备通过UDP发送数据给上位机,上位机抓包软件发现数据都收到了,上位机QudpSocket代码层接收数据存入内存偶尔丢包。

发送大约2000帧1.6s,也就是1200帧/s。1帧1KB大小。也就是1200KB/s,也就是1MB+/s

2 问题可能原因

2.1 接收数据后处理太慢(排除)

因为数据处理耗时基本很低,最后简化到直接append到队列都会丢失

2.2 接收缓冲区太小(原因所在)

QUdpSocket无法设置缓冲区大小,这里我的显示为64KB。因此是数据发送太快。缓冲区太小。

//在创建socket后立即设置 udpSocket=new QUdpSocket(this);//设置接收缓冲区大小(根据数据量调整) qint64 bufferSize=1024*1024*4;//4MB udpSocket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,bufferSize);//检查实际设置的大小 qint64 actualSize=udpSocket->socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption);qDebug()<<"Actual receive buffer size:"<<actualSize;

3 问题解决:使用socket不用Qt的QUdpSocket设置缓冲区。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询