本人在做QUpSocket的网络通信程序。代码如下:
 
int MainWindow::initSocket(quint16 localPort)
{
    if(udpSocket!=0){
        udpSocket->abort();
        delete udpSocket;
        udpSocket = 0;
    }
    udpSocket = new QUdpSocket(this);
    bool ret = udpSocket->bind(QHostAddress::AnyIPv4, localPort);
    if(!ret){
        QMessageBox::warning(this, "警告", QString("创建Socket失败!:%1").arg(udpSocket->errorString()));
        return -1;
    }
    connect(udpSocket, &QUdpSocket::readyRead, this , &MainWindow::readPendingDatagrams);
    return 0;
}
void MainWindow::readPendingDatagrams()
{
    qDebug()<<udpSocket->hasPendingDatagrams();
    while(udpSocket->hasPendingDatagrams())
    {
        QByteArray frame;
        frame.resize(udpSocket->pendingDatagramSize());
        QHostAddress address;
        quint16 port;
        udpSocket->readDatagram(frame.data(), frame.size(), &address, &port);
       processTheDatagrams(frame);
}
 开始时上位机给下位机发送01 10 ff的指令,收到下位机返回数据后发送后面的指令。
以下是Log日志:
 
[10:03:38.442 Send : 10.12.9.108 8081] 01 10 ff 
[10:03:38.474 Recv : 10.12.9.108 8081] 01 10 ff 
[10:03:41.479 Send : 10.12.9.108 8081] 01 17 00 
[10:03:41.485 Recv : 10.12.9.108 8081] 01 17 
[10:03:41.490 Send : 10.12.9.108 8081] 01 11 00 55 00 01 
[10:03:44.497 Send : 10.12.9.108 8081] 01 11 00 55 00 01
开始时收发指令正常,到发送01 11这条指令的时候,就收不到下位机返回的数据了,不知道是为何?
qDebug()<<udpSocket->hasPendingDatagrams();打印的状态有两个,一次是true, 一次是false,false的时候我就没法处理数据然后发送后续的指令了。
用Wireshark抓包软件,抓包也能看到下位机确实给我回传了响应01 11指令的数据。为何上位机接收不到呢?
 
难道是QUdpSocket的Bug????  
本人使用的Qt版本是Qt5.7.0 mingw版的。这个版本也用了有一年多了,之前也是相同的处理代码,没有遇到类似问题啊。最近碰到了,不知道怎么回事。大家有遇到过吗???