我正在使用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);
答案 0 :(得分:7)
一切都与标准有关。来自JSFiddle的关于多播地址的简短片段:
IPv4多播地址由1110的前导地址位定义,当这组地址被指定为D类时,它来自早期Internet的有类网络设计。该组的无类域间路由(CIDR)前缀是224.0.0.0/4。该组包括224.0.0.0至239.255.255.255的地址。
此外,MulticastSocket
组播组由D类IP地址和标准UDP端口号指定。 D类IP地址在224.0.0.0到239.255.255.255范围内。地址224.0.0.0是保留的,不应使用。
所以,是的,当您尝试加入组播地址超出此范围的组播组(如localhost 127.0.0.1)时,您会收到此异常。