8

私は MulticastSocket を使用していましたが、グループに参加しようとすると、「localhost」IP でグループを実行しているときに機能しませんでした。ただし、範囲は 224.0.0.1 から 239.255.255.254 の間である必要があると述べているこの記事http://lycog.com/programming/multicast-programming-java/を見つけました。その 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 によって定義されます。これは、このアドレス グループがクラス D として指定された初期のインターネットのクラスフル ネットワーク設計に由来します。このグループの Classless Inter-Domain Routing (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 に答える