2011-05-03 46 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