2011-05-26 59 views
2

我正在嘗試編寫一個應用程序,該應用程序使用Windows套接字監聽多個多播組。無法綁定到多播地址(Windows)

我運行的問題是,當我去綁定套接字,如果我嘗試綁定到多播組地址和端口,這將失敗,WSAEADDRNOTAVAIL。如果我將綁定到INADDR_ANY和端口,然後我仍然可以接收其他不相關的通信指向同一端口。

當我在Linux中實現同樣的事情時,我沒有任何問題綁定到多播地址(事實上,我看到它建議幾個地方避免獲取不相關的端口流量)。

這只是不適用於Windows套接字?我假設我可以通過使用WSARecvFrom自己來過濾流量,並在頭文件中查看,但我寧願有一個簡單的解決方案(如果存在)。

而且,這是在Windows Server上運行2008

+0

我與Windows套接字有同樣的問題。它看起來像Windows套接字不接受多播IP上的綁定,這使得它無法阻止套接字從同一端口上的其他IP接收不相關的流量。 – mtctn 2017-05-09 10:53:30

回答

0

雖然doc的綁定()不說這個不支持的,但它在言論說:

對於多播業務, 優選的方法是調用bind 功能到插座與 本地IP地址相關聯,然後加入 組播組....

也許這個方案會產生更好的結果?

+0

是的,正如我在原始問題中提到的那樣,您可以這樣做,但它不會阻止該套接字上的recv獲取該端口的單播數據。我沒有找到解決方案,除了做WSARecvMsg並檢查數據包信息以查看真正的目標地址。 – 2011-06-03 20:10:44

+0

對不起,我認爲使用IP_ADD_MEMBERSHIP的setsockopt()應該過濾出套接字的非組通訊,而不管在bind()中指定的地址如何。 – ribram 2011-06-03 22:00:35

相關問題