2011-05-03 21 views
2

QtSDK中有一个关于网络广播的简单例子。发送和接收广播信息很容易。而在接收端,我想知道我刚收到的广播包。我在readyRead信号回调函数中尝试QUdpSocket.peerName(),但是我得到了空字符串。任何线索?Qt网络广播问题:获取发件人IP

+0

youu找到任何解决方案 – Xsmael 2017-03-08 17:05:59

回答

0

从文档:

返回同位体的名称如由connectToHost(指定),或者如果connectToHost一个空的QString()没有被调用。

所以,如果你叫connectToHost()你应该得到一个结果。您也可以尝试peerAddress()。除非你总是通过名字连接,否则我不会指望你总是能够进行反向查询并获得一个名字。

+0

我应该在readyRead信号插槽中调用connectToHost()? – catinred 2011-05-03 15:00:47

2

当您使用QUdpSocket::readDatagram()读取数据包时,您可以检索发件人的IP地址。您需要将指针传递给readDatagram()的QHostAddress在其中存储地址:

QHostAddress senderAddress; 
yourSocket->readDatagram(&data, size, &senderAddress); 
// senderAddress now represents the sender address 

如果你需要,请参阅文档QHostAddress你可以得到的地址从senderAddress为QString或整数。

如果你想要一个主机名,你可以使用QHostInfo做反向查找(但不能保证获得一个名称)。

+0

在socket-> readDatagram之后,QString ip = socket-> peerAddress()。toString();我得到空字符串。 – catinred 2011-05-03 14:59:45

+0

@cantinred编辑。您需要传递readDatagram()指向要存储地址的QHostAddress的指针。 – Leiaz 2011-05-03 15:29:12

+0

@Leiaz它不起作用。接收广播数据包时,您获得的地址(位于senderAddress中)为0.0.0.0。我认为它也可以工作,但是要么是Qt做了一些愚蠢的事情,要么Linux的底层套接字实现为您提供了一个空的接收广播数据包的源地址。 – doug65536 2013-05-19 11:24:26