我是靠谱客的博主 野性香菇,最近开发中收集的这篇文章主要介绍QT UDP接收一段时间后接收不到的问题解决QT UDP接收一段时间后接收不到的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

解决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接收一段时间后接收不到的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部