簡體   English   中英

UDP廣播到所有IP在某些網絡中不起作用

[英]UDP Broadcast to All IPs not working in some networks

關於這個問題還有很多其他答案,但是我相信這是特定的。

我正在使用Delphi XE2和Indy 10.5.8和TIdUDPServer

在我的本地開發網絡中,所有內容都位於同一網絡ip子范圍內,並且都連接到同一接入點(LinkSys)

我有Android的sendind UDP廣播到255.255.255.255,以請求在Delphi中編寫的服務器IP地址,使用端口44444上的TIdUDPServer進行偵聽。

請求到那里很好,我可以沒有問題的答復。 完全按預期工作。

但是我注意到在某些網絡中它不起作用! 它始終是基於訪問點的簡單網絡,我不確定,但是似乎問題出在哪里,服務器PC連接到LAN端口,而設備正在使用wifi,所有這些都位於同一訪問點。

接入點可能不會同時通過LAN和wifi廣播UDP數據包嗎? 我知道這種廣播非常有限,但是我還沒有發現任何信息可以告訴我,在同一接入點中存在這樣的限制。

有測試或解決方法的方法嗎?

該解決方案必須足夠強大,以應對那里的許多AP。

編輯:對於那些想要從源代碼中獲取更多信息的源代碼的人,包括下面的答案中提到的廣播IP,請遵循此解決方案,它就在那里。

http://www.code10.info/index.php?option=com_content&view=article&id=54:articleretrieve-network-adapter-information&catid=47:cat_coding_algorithms_network&Itemid=78

255.255.255.255不是發送UDP廣播的最佳選擇,除非另外配置,否則某些路由器/防火牆會阻止它。 更好的選擇是改用NIC的實際子網廣播IP。 例如,如果UDP套接字綁定到子網掩碼為255.255.255.0本地IP 192.168.0.1 ,則該子網的廣播IP為192.168.0.255

大多數平台都有特定於OS的API,用於檢索NIC的實際廣播IP,例如POSIX系統上的getifaddrs() ,或者至少用於檢索NIC的子網掩碼,例如Windows上的GetAdaptersInfo()GetAdaptersAddresses() ,因此您可以計算手動廣播IP。

檢索本地廣播IP可能會在將來的版本中添加到Indy。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM