2016-08-16 166 views
0

我很難在Python中接收UDP廣播。通過以太網連接到PC的設備在特定地址和端口上廣播消息。我嘗試了很多在線發現的多播python示例,但我永遠不能收到數據。使用wireshark我可以看到UDP廣播正在到達PC。接收非標準的UDP廣播python

Wireshark capture

我試圖在OSX和Linux也不工作。我只能假定消息沒有被接收,因爲設備使用非標準的UDP結構,即沒有校驗和驗證等。

有關如何接收這些UDP廣播的任何想法?

謝謝!

編輯:最簡單的形式在當前的代碼是:

from socket import * 
s=socket(AF_INET, SOCK_DGRAM) 
s.bind(('239.255.60.60',4876)) 
m=s.recvfrom(1024) 
print (m[0]) 

但是我已經試過如Multicast in Python的額外多播例子,我還沒有能夠得到了什麼!

+0

請添加一個最小的,完整的和可驗證的例子。 http://stackoverflow.com/help/mcve – rfkortekaas

+1

通常,您的操作系統網絡堆棧會爲您捕獲IP數據包;如果你想使用原始IP,你應該給我們更多的細節(什麼操作系統,什麼版本的Python,並請*顯示罰款代碼*)。 – wazoox

+0

我在Ubuntu上使用Python3,我相信我將不得不使用原始套接字,並從頭開始... – user2818700

回答

0

您沒有收到廣播,因爲您沒有使用廣播地址。

要麼使用:

還是正確的廣播地址,你的IP。

+0

我曾嘗試使用''以及0.0.0.0,但仍然沒有收到數據。 – user2818700

+0

如果您在綁定之前添加以下內容,它會有幫助嗎:s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) – rfkortekaas

+0

不幸的是:( – user2818700

0

好的找到了答案,而不是孤立的這個場景,踢我自己俯視它。

通過以太網連接的設備正在等待分配IP地址! Wireshark必須在比python更低的級別上捕獲網絡流量。

無論如何手動分配設備一個IP地址,現在它工作。很多救濟。