モジュール java.base
パッケージ java.net

クラスMulticastSocket

java.lang.Object
java.net.DatagramSocket
java.net.MulticastSocket
すべての実装されたインタフェース:
Closeable, AutoCloseable

public class MulticastSocket extends DatagramSocket
MulticastSocketは、IPマルチキャスト・データグラムの送受信に便利なデータグラム・ソケットです。 MulticastSocketコンストラクタは、マルチキャスト・データグラムの受信に適した適切なソケット・オプションを有効にしてソケットを作成します。 MulticastSocketクラスは、マルチキャスト・アプリケーションで一般的に使用されるソケット・オプションの便利なsetterメソッドとgetterメソッドをさらに定義します。

1つ以上のマルチキャスト・グループに参加すると、これらのグループに送信されたマルチキャスト・データグラムを受信できます。

IPv4マルチキャスト・グループは、クラスD IPアドレスと標準のUDPポート番号によって指定されます。 クラスD IPアドレスの範囲は、224.0.0.0から239.255.255.255までです。 アドレス224.0.0.0は予約されており、使用できません。

まず、目的のポートでMulticastSocketを作成し、次にjoinGroupメソッドを起動して、グループ・アドレスとマルチキャスト・データグラムを受信するネットワーク・インタフェースを指定します:


 // join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
 InetSocketAddress group = new InetSocketAddress(mcastaddr, 6789);
 NetworkInterface netIf = NetworkInterface.getByName("bge0");
 MulticastSocket s = new MulticastSocket(6789);

 s.joinGroup(new InetSocketAddress(mcastaddr, 0), netIf);
 byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
 DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, group);
 s.send(hi);
 // get their responses!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group, netIf);
 
マルチキャスト・グループにメッセージを送信すると、そのホストとポートのすべての参加者がメッセージを受け取ります(ただしパケットの有効期間内に限られる。詳細は後述)。 マルチキャスト・グループにメッセージを送信するためには、ソケットがそのマルチキャスト・グループのメンバーである必要はありません。

ソケットがマルチキャスト・グループまたはポートに参加すると、ほかのホストからそのグループまたはポートに送信されたデータグラムを受信することができます。そのグループとポートの他のメンバーもすべて同じデータグラムを受信します。 ソケットは、leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)メソッドによってグループ内のメンバーシップを放棄します。 「複数MulticastSockets」は、マルチキャスト・グループとポートを同時にサブスクライブでき、すべてのグループ・データグラムを受信します。

DatagramSocketクラスおよびMulticastSocketクラスは、いくつかのソケット・オプションを設定および取得するための便利なメソッドを定義しています。 このクラスは、DatagramSocketと同様、ソケット・オプションを設定および問合せするためのsetOptionおよびgetOptionメソッドもサポートしています。 サポートされているソケット・オプションのセットは、DatagramSocketで定義されます。 追加(実装固有)のオプションをサポートできる場合もあります。

APIのノート:
DatagramSocketは、マルチキャスト・データグラムの送受信に直接使用できます。 DatagramChannelは、MulticastChannelインタフェースを実装し、マルチキャスト・データグラムを送受信するための代替APIを提供します。 MulticastChannel APIは、any-sourceおよびsource-specificの両方のマルチキャストをサポートしています。 マルチキャストにDatagramChannelを使用することを検討してください。
導入されたバージョン:
1.1