【随手记】Qt UDP使用writeDatagram没有发送数据

22 篇文章 2 订阅

详情

使用UDP的writeDatagram发送数据,如果时间到没有获取到返回的数据就弹出消息框,然后断开监听的端口号.
但是遇到连续发送大数据包,会出现抓包查看的时候没有数据发送.

void UdpServer::timeOutSend()
{
    if(NEED_SEND == udpTimeEvent)
    {
//        qDebug()<<"发送一次数据";
        sendData(timeToIp,timeToPort,timeToSendData);//sendCount<0的话 无限制发送
        if(sendCount>0)
        {
            sendCount--;
            if(sendCount == 0)
            {
                waitRec = false;
                udpTimeEvent = IDLE;
            }

        }
    }
    else if(udpTimeEvent == IDLE)
    {
        timeSend->stop();//没事干 就关掉一切
        disConnectUdp();
        sendCount = 0;
        emit udpMessage("1-发送结束",udpTimeEvent);
        if(waitRec == false && timeToNeedMessageBox)
        {
            timeToNeedMessageBox = false;
            emit udpMessage("0-无参数返回",udpTimeEvent);
        }
    }
}
void UdpServer::sendData(const QString &ip, quint16 port, const QString &data)
{
    QByteArray buffer = QHelpApi::hexStrToByteArray(data);
//    qDebug()<<"发送IP地址 "<<ip<<" 发送端口号"<<port<<"发送数据 "<<data;
    qDebug()<<"发送结果 "<<udpSocket->writeDatagram(buffer, QHostAddress(ip), port);
}

解决方法

1.加长发送后的等待时间,原先等待1000ms就关闭,现在改为等待3000ms关闭.然后抓包就可以看到了有数据发送出去了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值