2016-02-24 107 views
0

我有一個小客戶端程序監聽IPv6多播組(例如ff12 :: blah:blah%en0),以發送服務器發出的多播數據包。它運作良好。設置爲接收多播數據包的IPv6 UDP套接字是否也能夠接收單播數據包?

服務器有時也希望向我的客戶端發送一個單播數據包(因爲如果數據包只與一個客戶端相關,那麼使用它的所有其他組播組成員都沒有意義)。因此,我的服務器只是爲我的客戶端的IP地址和客戶端的IPv6多播套接字所偵聽的端口執行sendto()。

如果我的客戶端在MacOS/X下運行,這可以正常工作;單播數據包由接收組播數據包的相同套接字接收。在Windows,OTOH下,客戶端永遠不會收到單播數據包(即使它確實接收到多播數據包也沒有任何問題)。

我的問題是,是否期望多點傳送偵聽程序IPv6 UDP套接字也應該能夠接收同一端口上的單播數據包(在這種情況下,也許我做錯了什麼,或者Windows錯誤配置)?或者這是MacOS/X下的「恰好工作」,但不能保證,所以它在Windows下對我不起作用只是意味着我有錯誤的期望?

+0

它應該工作,除非套接字*綁定到多播地址。 – EJP

回答

0

它應該工作正常。只要你綁定到IN6ADDR_ANY,然後加入多播組,你應該可以發送和接收單播數據包,沒有問題。

使用多播時,綁定到IN6ADDR_ANY(或IPv4的INADDR_ANY)很重要。如果綁定到特定的接口,則會在Linux系統上破壞多播。

+1

只要他出價的IP地址是本地IP地址,並且所有發件人都可以訪問,他就不必綁定到INADDR_ANY。重要的是不要使用Linux的多點地址綁定的奇特功能。 – EJP

+0

@EJP如果你想讓多播工作,你可以這樣做。看我的編輯。 – dbush

+0

謝謝 - 罪魁禍首原來是Windows防火牆,它阻止來自Windows客戶端的傳入單播數據包,但阻止傳入的多播數據包。按照預期禁用防火牆允許我的客戶端接收這兩種類型。 –