创建一个MulticastSocket之后,我试图加入一个多播组。

做类似的事情:

MulticastSocket mySocket = new MulticastSocket(4444);
mySocket.joinGroup(InetAddress.getByName("230.0.0.1")); // as an example

工作正常。但是,当我使用接受SocketAddress作为参数的MulticastSocket构造函数时,多播组未加入,并且需要对joinGroup()进行单独的调用。
MulticastSocket mySocket = new MulticastSocket(new InetSocketAddress("230.0.0.1", 4444));

为什么是这样?

谢谢!

最佳答案

除非我错了,否则组播是通过在本地网络交换机上注册来实现的(使用发送IGMP消息的joinGroup方法),然后交换机会将所有发送到组播地址的数据包转发到已注册的每个设备。如果您不调用joinGroup,则不会发送任何组注册消息,本地交换机不知道您是否在乎这些消息,因此实际上也不会收到任何消息。

有些交换机在发送方面比其他交换机更为严格:我已经看到有些交换机可以在不注册的情况下将设备发送给多播组发送,但不能接收到多播组的数据包,并且我已经看到其他交换机在其中必须注册该设备成功发送到多播组的其他成员或接收发送到多播组的数据包。

10-08 03:33