概述
解决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封装过的方法。
最后
以上就是野性香菇为你收集整理的QT UDP接收一段时间后接收不到的问题解决QT UDP接收一段时间后接收不到的问题的全部内容,希望文章能够帮你解决QT UDP接收一段时间后接收不到的问题解决QT UDP接收一段时间后接收不到的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复