QT UDP接收一段时间后接收不到的问题

it2024-04-21  79

解决QT UDP接收一段时间后接收不到的问题

现象:

创建QUdpSocket对象后一段时间内能够接收到数据正常读取,过后就读取不到数据,但是抓包工具wireshark看还在发没有停过

解决:

目前还没有找到问题,测试过也不是内存溢出或速度不匹配的问题,单纯是这个socket没有数据给出。参考过一位老哥的解决方案:https://blog.csdn.net/zhulichen/article/details/52491132 他的逻辑是有问题的,但是思路可以借鉴

定义一个全局变量err_cnt,比如说你的接收周期大概是10ms一次,你可以定个2ms(自己根据需求定)的计数器用来递增这个计数值,每次接收到数据就就将它清零。在定时器里当计数值err_cnt到10(自己定)就说明这个socket已经失效了,可以将它delete掉然后重新创建一个socket重新初始化便可以延续接收,完美解决。

定时器具体代码:

void MainWindow::onTimeout() { socket_err_cnt++; if (socket_err_cnt >= 5) { cout<<"error socket!"<<endl; socket_err_cnt = 0; socket->close(); socket = new QUdpSocket(); socket->bind(QHostAddress("192.168.1.3"),6666); connect(socket, SIGNAL(readyRead()), this, SLOT(receive())); } }

但是,真要解决这个问题可以考虑用windows或linux下系统自带的socket通信API试试,不要用qt封装过的方法。

最新回复(0)