【发布时间】:2011-05-03 13:53:15
【问题描述】:
QtSDK中有一个关于网络广播的简单例子。轻松发送和接收广播信息。而在接收端,我想知道我刚刚收到了谁的广播包。我在 readyRead 信号回调函数中尝试 QUdpSocket.peerName(),但我得到空字符串。有什么线索吗?
【问题讨论】:
-
你找到解决办法了吗
标签: qt networking udp broadcast
QtSDK中有一个关于网络广播的简单例子。轻松发送和接收广播信息。而在接收端,我想知道我刚刚收到了谁的广播包。我在 readyRead 信号回调函数中尝试 QUdpSocket.peerName(),但我得到空字符串。有什么线索吗?
【问题讨论】:
标签: qt networking udp broadcast
您可以在使用QUdpSocket::readDatagram() 读取数据包时检索发件人的IP 地址。您需要向 readDatagram() 传递一个指向 QHostAddress 的指针,用于存储地址:
QHostAddress senderAddress;
yourSocket->readDatagram(&data, size, &senderAddress);
// senderAddress now represents the sender address
如果需要,您可以从 senderAddress 以 QString 或整数形式获取地址,请参阅QHostAddress 的文档。
如果你想要一个主机名,你可以使用QHostInfo 做一个反向查找(但你不能保证得到一个名字)。
【讨论】:
来自文档:
返回由 connectToHost() 指定的对等点的名称,如果尚未调用 connectToHost(),则返回一个空的 QString。
所以,如果您调用了connectToHost(),您应该会得到一个结果。你也可以试试peerAddress()。除非您始终通过名称进行连接,否则我不希望您始终能够进行反向查找并获得名称。
【讨论】: