[英]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,請遵循此解決方案,它就在那里。
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.