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

swr*_*rap 6 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);
Run Code Online (Sandbox Code Playgroud)

//抛出

Unable to connect to host:localhost on port:8888
java.net.SocketException: Not a multicast address
Run Code Online (Sandbox Code Playgroud)

有效的示例:

InetAddress group = InetAddress.getByName("224.0.0.1");
int port = 8888;
MulticastSocket socket = new MulticastSocket(port);
socket.joinGroup(group);
Run Code Online (Sandbox Code Playgroud)

Sta*_*lav 9

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

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

此外,几乎同样是在上述的javadocMulticastSocket

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

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