1

我有一个小客户端程序,它在 IPv6 多播组(例如 ff12::blah:blah%en0)上侦听服务器发出的多播数据包。它运作良好。

服务器有时还想向我的客户端发送一个单播数据包(因为如果该数据包仅与一个客户端相关,那么用它来打扰多播组的所有其他成员是没有意义的)。所以我的服务器只是对我的客户端的 IP 地址和客户端的 IPv6 多播套接字正在侦听的端口执行 sendto()。

如果我的客户端在 MacOS/X 下运行,这可以正常工作;单播数据包由接收多播数据包的同一个套接字接收。在 Windows 下,OTOH,客户端永远不会收到单播数据包(即使它确实收到了多播数据包而没有任何问题)。

我的问题是,是否期望多播侦听器 IPv6 UDP 套接字也应该能够在同一端口上接收单播数据包(在这种情况下,我可能做错了什么,或者 Windows 配置错误)?或者这是在 MacOS/X 下“恰好可以工作”但不能保证的东西,所以它在 Windows 下对我不起作用的事实只是意味着我有错误的期望?

4

1 回答 1

0

它应该可以正常工作。只要你绑定到IN6ADDR_ANY,然后加入多播组,你应该可以毫无问题地发送和接收单播数据包。

使用多播时,绑定到IN6ADDR_ANY(或用于 IPv4)很重要。INADDR_ANY如果绑定到特定接口,这会破坏 Linux 系统上的多播。

于 2016-02-24T21:52:24.287 回答