本人在做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版的。这个版本也用了有一年多了,之前也是相同的处理代码,没有遇到类似问题啊。最近碰到了,不知道怎么回事。大家有遇到过吗???