Qt QUdpSocket readDatagram无法获取发件人的IP地址

时间:2018-03-29 09:03:25

标签: qt udp ip

Qt Version 5.10.0 (MSVC 2015, 32bit)

我的PC有一个静态主机地址(" 192.168.0.106"),以及一个由路由器分配的任意IP地址的设备。我想在它们之间建立UDP连接。

Qt有一个名为multicastreceiver的udp演示,我修改了Receiver :: processPendingDatagrams()函数,如下所示:

QByteArray datagram;
QHostAddress senderIP = QHostAddress();
quint16 portx = 0;

while (udpSocket.hasPendingDatagrams()) {
    datagram.resize(int(udpSocket.pendingDatagramSize()));
    udpSocket.readDatagram(datagram.data(), datagram.size(), &senderIP, &portx);
    statusLabel->setText(tr("Received datagram: \"%1\" @ %2:%3")
        .arg(datagram.constData())
        .arg(senderIP.toIPv4Address())
        .arg(portx));
}

并在构造函数中:

udpSocket.bind(QHostAddress::AnyIPv4, 18427, QUdpSocket::ShareAddress);
connect(&udpSocket, SIGNAL(readyRead()),
    this, SLOT(processPendingDatagrams()));

我成功收到了udp消息,但是

senderIP.toIPv4Address() is 0, and senderIP.toString is NULL
portx is 64800 but it is wrong

有人可以告诉我这些代码有什么问题吗?

PS:我可以通过UDP调试工具(PC程序)获取udp消息和发件人IP地址以及正确的端口号。

1 个答案:

答案 0 :(得分:1)

我认为您在Qt中发现了一个已知错误:

docs

这在Qt 5.9.4中得到修复 - 我也相信5.10.1。

另见https://bugreports.qt.io/browse/QTBUG-64784