當通過dgram.createSocket('udp4');
設置套接字並且不將其綁定到特定的端口時我接收的廣播數據包被髮送到255.255.255.255 但是,當我將相同的套接字綁定到我的接口的具體IP this.server.bind(67, host);
我不會收到這些廣播的數據包。這是一個正常的行爲?在收聽特定端口時收到廣播的數據包
回答
的Javadoc for java.net.DatagramSocket說:
爲了接收的廣播包一個DatagramSocket應該綁定 到通配符地址。在一些實現中,當DatagramSocket被綁定到更具體的地址時,也可以接收廣播分組 。
這是一個非常清楚的跡象表明,行爲是平臺相關的,所以Javascript套接字也會受到同樣的折磨。
根據我的測試,Windows Vista 64的行爲不像第二句中所述(即,除非綁定到INADDR_ANY,否則不接收廣播)。
是的,這是正常現象,因爲,沒有一個端口或接口,dgram.createSocket()將:
綁定到一個隨機端口上的「全接口」地址(它的權利對於udp4和udp6套接字)。
- 從dgram API documentation上nodejs.org
,讓您捕捉到的廣播數據包到任何端口任何可用的接口上。
將接口和端口都驗證爲createSocket(),只會捕獲已經廣播到綁定到指定端口上指定接口的網絡的數據包。
您應該注意,要接收到特定接口的廣播,他們需要被髮送到該接口所服務的網絡的廣播地址。
所以,如果你的網絡是:
10.1.1.0
與網絡掩碼:
255.255.255.252
這也是:
10.1.1.0/29 (CIDR notation)
正確的廣播地址是:
10.1.1.7
考慮到您的網絡地址和網絡掩碼,tuxgraphics.org的「Network and IP address calculator」是一種工具,可用於識別特定網絡的正確廣播地址。
該行爲實際上取決於平臺。參見例如Stevens,Fenner,&Rudolf,* Unix Network Programming,* Vol I,3rd edition,p。 532,和RFC 1192的#3.3.6,它在這個問題上「不承認」。 – EJP
- 1. 如何在c linux中的特定接口上收聽廣播?
- 2. 收聽UDP廣播
- 3. 廣播接收器去聽一個特定的包刪除
- 4. 安卓服務收聽特定端口
- 5. 當收到UDP數據包時,該端口與監聽端口不匹配
- 6. 活動收聽廣播接收器
- 7. 在我的數據包收聽器中未收到數據包
- 8. 收到廣播
- 9. iBeacones廣播和同時收聽
- 10. 接收udp廣播數據包ios
- 11. 收聽UDP端口
- 12. 收聽端口5060
- 13. 如何監聽任何端口上的廣播數據包?
- 14. 使用UDPClient收聽特定端口並獲取傳輸數據包
- 15. 在C++中接收到地址爲255.255.255.255的廣播數據包
- 16. 收聽和收聽特定的短信?
- 17. 未收到廣播
- 18. 收聽所有的端口
- 19. 端口的收聽能力
- 20. 收聽Java中的ARP廣播
- 21. 配置Scapy監聽特定的數據包,一旦收到數據包,發送特定的數據包
- 22. 未在睡眠模式下收到UDP廣播數據包
- 23. 如何在iPhone ios4.2上的特定端口上收聽?
- 24. 使用數據包套接字接收廣播數據包
- 25. c#udp廣播包沒有收到
- 26. 不斷收聽端口
- 27. 使用UdpClient收聽UPnP廣播
- 28. 從網絡收聽廣播流
- 29. 廣播接收器監聽器
- 30. 使用增強庫收聽udp廣播
-1因爲這個問題與Java沒有關係。 –
@RobRaisch還有一個快樂-1。如果你已經正確地閱讀了我的答案,那麼你會看到我引用Javadoc *作爲證據表明該行爲是依賴於平臺的*,並且因此它也影響Javascript,並且實際上所有其他語言都是平等的。可惜你第一次沒有得到它。 – EJP