8

我正在使用 MulticastSocket,当我尝试加入一个组时,当我在“localhost”ip 上运行组时它永远不会工作。但是,我发现这篇文章http://lycog.com/programming/multicast-programming-java/指出范围应该在 224.0.0.1 和 239.255.255.254 之间。当我从该 IP 中创建一个 InetAddress 并加入该组时,它就起作用了。请解释为什么这是必要的。

例子:

InetAddress group = InetAddress.getByName("localhost");
int port = 8888;
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(group);

//抛出

Unable to connect to host:localhost on port:8888
java.net.SocketException: Not a multicast address

有效的例子:

InetAddress group = InetAddress.getByName("224.0.0.1");
int port = 8888;
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(group);
4

1 回答 1

12

一切都与标准有关。只是关于多播地址的wiki 文章的一个简短片段:

IPv4 多播地址由 1110 的前导地址位定义,起源于早期 Internet 的有类网络设计,当时这组地址被指定为 D 类。该组的无类域间路由 (CIDR) 前缀是 224.0。 0.0/4。该组包括从 224.0.0.0 到 239.255.255.255 的地址。

此外,javadoc中对MulticastSocket

多播组由 D 类 IP 地址和标准 UDP 端口号指定。D 类 IP 地址的范围为 224.0.0.0 到 239.255.255.255(含)。地址 224.0.0.0 已保留,不应使用。

所以,是的,当您尝试加入一个组地址超出此范围的多播组(如 localhost 127.0.0.1)时,您会收到此异常。

于 2015-11-26T20:03:16.993 回答