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封装过的方法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值