记录Qt的UDP通信丢包问题

记录Qt的UDP通信丢包问题

  • 记录Qt的UDP通信丢包问题
    • [1 问题](#1 问题)
    • [2 问题可能原因](#2 问题可能原因)
      • [2.1 接收数据后处理太慢(排除)](#2.1 接收数据后处理太慢(排除))
      • [2.2 接收缓冲区太小(原因所在)](#2.2 接收缓冲区太小(原因所在))
    • [3 问题解决:使用socket不用Qt的QUdpSocket设置缓冲区。](#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。因此是数据发送太快。缓冲区太小。

python 复制代码
// 在创建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设置缓冲区。

相关推荐
wuqingshun31415914 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
飞猪~14 小时前
LangChain python 版本 第一集
开发语言·python·langchain
李燚16 小时前
Go 项目怎么组织:DDD 4 层 vs MVC vs 脚本式
开发语言·golang·mvc·ddd·agent框架·eino
2zcode16 小时前
免费开源项目文档:基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
人工智能时代 准备好了吗16 小时前
AI回答内容进入率监测:引用识别、文本匹配与语义判断
开发语言·人工智能·python
LONGZETECH16 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
郝学胜-神的一滴17 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
Metaphor69217 小时前
使用 Python 冻结 Excel 文件中的行、列和单元格
开发语言·python·excel
言乐617 小时前
Python实现建造微服务商城后台
开发语言·python·算法·微服务·架构
KobeSacre18 小时前
Semaphore 源码
java·开发语言