java.net.SocketException:不是多播地址

时间:2015-11-26 19:48:12

标签: java networking network-programming datagram multicastsocket

我正在使用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);

1 个答案:

答案 0 :(得分:7)

一切都与标准有关。来自JSFiddle的关于多播地址的简短片段:

  

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

此外,MulticastSocket

wiki article中几乎相同
  

组播组由D类IP地址和标准UDP端口号指定。 D类IP地址在224.0.0.0到239.255.255.255范围内。地址224.0.0.0是保留的,不应使用。

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