2016-02-24 43 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客户端的传入单播数据包,但阻止传入的多播数据包。按照预期禁用防火墙允许我的客户端接收这两种类型。 –