クラス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
  • コンストラクタの詳細

    • MulticastSocket

      public MulticastSocket() throws IOException
      マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。 ソケットはwildcardアドレスにバインドされます。

      ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。

      スロー:
      IOException - MulticastSocketの作成中に入出力例外が発生した 合
      関連 目:
    • MulticastSocket

      public MulticastSocket(int port) throws IOException
      マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。 ソケットはwildcardアドレスにバインドされます。

      ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。

      パラメータ:
      port - 使用するポート
      スロー:
      IOException - MulticastSocketの作成中に入出力例外が発生した 合
      IllegalArgumentException - ポートが「範囲外です。」の 合
      関連 目:
    • MulticastSocket

      public MulticastSocket(SocketAddress bindaddr) throws IOException
      指定されたローカル・ソケット・アドレスにバインドされたマルチキャスト・ソケットを作成します。

      アドレスがnullの 合、バインドされていないソケットが作成されます。

      ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。

      パラメータ:
      bindaddr−バインドするソケット・アドレス。アンバウンドのソケットの 合はnull
      スロー:
      IOException - MulticastSocketの作成中に入出力例外が発生した 合
      導入されたバージョン:
      1.4
      関連 目:
  • メソッドの詳細

    • setTTL

      @Deprecated(forRemoval=true, since="1.2") public void setTTL(byte ttl) throws IOException
      削除予定のため非推奨: このAPI要 は、将来のバージョンで削除される可能性があります。
      かわりにsetTimeToLive(int)メソッドを使用します。これは、ttlのタイプとしてbyteのかわりにintを使用します。
      マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。

      ttlは符号なし8ビット・データなので、0 <= ttl <= 0xFFの範囲でなければいけません

      パラメータ:
      ttl - 有効期間
      スロー:
      IOException - デフォルトの存続時間値の設定中にI/O例外が発生した 合、またはソケットが閉じている 合。
      関連 目:
    • setTimeToLive

      public void setTimeToLive(int ttl) throws IOException
      マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。

      ttlの範囲は 0 <= ttl <= 255でなければいけません。そうでない 合は、IllegalArgumentExceptionがスローされます。 TTLが0で送信されたマルチキャスト・パケットは、ネットワークでは転送されませんが、ローカルで転送されることがあります。

      APIのノート:
      このメソッドは、setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl)のコールと同等です。
      パラメータ:
      ttl - 有効期間
      スロー:
      IOException - デフォルトの存続時間値の設定中にI/O例外が発生した 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.2
      関連 目:
    • getTTL

      @Deprecated(forRemoval=true, since="1.2") public byte getTTL() throws IOException
      削除予定のため非推奨: このAPI要 は、将来のバージョンで削除される可能性があります。
      かわりにgetTimeToLive()メソッドを使用し、byteのかわりにintを返します。
      このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。
      戻り値:
      デフォルトの有効期間値
      スロー:
      IOException - デフォルトの存続時間値の取得中にI/O例外が発生した 合、またはソケットが閉じている 合。
      関連 目:
    • getTimeToLive

      public int getTimeToLive() throws IOException
      このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。
      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.IP_MULTICAST_TTL)のコールと同等です。
      戻り値:
      デフォルトの有効期間値
      スロー:
      IOException - デフォルトの存続時間値の取得中にI/O例外が発生した 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.2
      関連 目:
    • joinGroup

      @Deprecated(since="14") public void joinGroup(InetAddress mcastaddr) throws IOException
      非推奨。
      このメソッドは、マルチキャスト・グループに参 するネットワーク・インタフェースを受け入れません。 代わりにjoinGroup(SocketAddress, NetworkInterface)を使用してく さい。
      あるマルチキャスト・グループに参 します。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。
      APIのノート:
      このメソッドの呼出しは、joinGroup(new InetSocketAddress(mcastaddr, 0), null)の呼出しと同じです。
      パラメータ:
      mcastaddr - 参 するマルチキャスト・アドレス
      スロー:
      IOException - 参 中にエラーが発生した 合、またはアドレスがマルチキャスト・アドレスでない 合、またはプラットフォー がマルチキャストをサポートしていない 合、またはソケットが閉じている 合。
    • leaveGroup

      @Deprecated(since="14") public void leaveGroup(InetAddress mcastaddr) throws IOException
      非推奨。
      このメソッドは、マルチキャスト・グループから脱退するネットワーク・インタフェースを受け入れません。 代わりにleaveGroup(SocketAddress, NetworkInterface)を使用してく さい。
      あるマルチキャスト・グループから離れます。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。
      APIのノート:
      このメソッドの呼出しは、leaveGroup(new InetSocketAddress(mcastaddr, 0), null)の呼出しと同じです。
      パラメータ:
      mcastaddr - 離れるマルチキャスト・アドレス
      スロー:
      IOException - 退出中にエラーが発生した 合、またはアドレスがマルチキャスト・アドレスでない 合、またはソケットが閉じている 合。
    • joinGroup

      public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      あるマルチキャスト・グループに参 します。

      マルチキャスト・グループに参 するには、コール元が参 するマルチキャスト・グループのIPアドレスを指定し、マルチキャスト・パケットを受信するローカル「ネットワーク・インタフェース」を指定する必要があります。

      • mcastaddr引数は、結合するマルチキャスト・グループのIPアドレスを示します。 履歴上の理由から、これはSocketAddressとして指定されます。 デフォルトの実装はInetSocketAddressのみをサポートし、port情 は無視されます。
      • netIf引数は、マルチキャスト・データグラ ・パケットを受信するローカル・インタフェース、または送信マルチキャスト・データグラ のインタフェース・セットに遅延するnullを指定します。 nullで、インタフェースが設定されていない 合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。

      このメソッドを複数回呼び出して、複数の異なるマルチキャスト・グループを結合するか、複数の異なるネットワークで同じグループに参 することができます。 た し、ソケットがすでにグループのメンバーである 合は、IOExceptionがスローされます。

      オーバーライド:
      クラスDatagramSocketjoinGroup
      パラメータ:
      mcastaddr - 、参 するマルチキャスト・アドレスを示します。
      netIf - マルチキャスト・データグラ ・パケットを受信するローカル・インタフェース、またはnullを指定します。
      スロー:
      IOException - 参 中にエラーが発生した 合、またはアドレスがマルチキャスト・アドレスでない 合、またはプラットフォー がマルチキャストをサポートしていない 合、またはソケットが閉じている 合
      IllegalArgumentException - mcastaddrがnullであるか、このソケットでサポートされないSocketAddressサブクラスである 合
      導入されたバージョン:
      1.4
      関連 目:
    • leaveGroup

      public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。
      オーバーライド:
      クラスDatagramSocketleaveGroup
      APIのノート:
      mcastaddrおよびnetIf引数は、このDatagramSocketによって以前に「結合」であったマルチキャスト・グループを識別する必要があります。

      このメソッドを複数回呼び出して複数の異なるマルチキャスト・グループが以前に結合されたままになるか、同じグループを複数の異なるネットワークで以前に結合されたままにしておくことができます。 た し、ソケットが指定されたネットワーク内の指定されたグループのメンバーでない 合、IOExceptionがスローされます。

      パラメータ:
      mcastaddr - 離れるマルチキャスト・アドレス これには、グループの「結合」に使用されるものと同じIPアドレスが含まれている必要があります。
      netIf - 送信マルチキャスト・データグラ のインタフェース・セットに遅延するローカル・インタフェースまたはnullを指定します。 nullで、インタフェースが設定されていない 合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。
      スロー:
      IOException - 退出中にエラーが発生した 合、またはアドレスがマルチキャスト・アドレスでない 合、またはソケットが閉じている 合。
      IllegalArgumentException - mcastaddrがnullの 合、またはこのソケットでサポートされないSocketAddressサブクラスである 合。
      導入されたバージョン:
      1.4
      関連 目:
    • setInterface

      @Deprecated(since="14") public void setInterface(InetAddress inf) throws SocketException
      非推奨。
      InetAddressではネットワーク・インタフェースを一意に識別できない 合があります。 代わりにsetNetworkInterface(NetworkInterface)を使用してく さい。
      ネットワーク・インタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャスト・ネットワーク・インタフェースを設定します。 マルチホー のホストに便利です。
      パラメータ:
      inf − InetAddress
      スロー:
      SocketException - TCPエラーなどの基礎となるプロトコルにエラーがある 合、またはソケットが閉じている 合。
      関連 目:
    • getInterface

      @Deprecated(since="14") public InetAddress getInterface() throws SocketException
      非推奨。
      ネットワーク・インタフェースは、戻されたInetAddressによって一意に識別されない 合があります。 代わりにgetNetworkInterface()を使用してく さい。
      マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを取得します。
      戻り値:
      マルチキャスト・パケットに使用されるネットワーク・インタフェースのアドレスを表すInetAddress。または、インタフェースが設定されていない 合は、すべてのローカル・アドレスを表すInetAddressです。
      スロー:
      SocketException - TCPエラーなどの基礎となるプロトコルにエラーがある 合、またはソケットが閉じている 合。
      関連 目:
    • setNetworkInterface

      public void setNetworkInterface(NetworkInterface netIf) throws SocketException
      このソケットから送信される送出マルチキャスト・データグラ 用のネットワーク・インタフェースを指定します。
      APIのノート:
      このメソッドは、setOption(StandardSocketOptions.IP_MULTICAST_IF, netIf)のコールと同等です。
      パラメータ:
      netIf−インタフェース
      スロー:
      SocketException - TCPエラーなどの基礎となるプロトコルにエラーがある 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.4
      関連 目:
    • getNetworkInterface

      public NetworkInterface getNetworkInterface() throws SocketException
      このソケットから送信された送信マルチキャスト・データグラ のマルチキャスト・ネットワーク・インタフェース・セットを取得します。
      APIのノート:
      インタフェースが設定されている 合、このメソッドはgetOption(StandardSocketOptions.IP_MULTICAST_IF)の呼出しと同じです。
      戻り値:
      マルチキャストNetworkInterfaceは現在設定されています。 プレースホルダーNetworkInterfaceは、インタフェースが設定されていない 合に返されます。ローカル・アドレスを表すInetAddressは1つのみです。
      スロー:
      SocketException - TCPエラーなどの基礎となるプロトコルにエラーがある 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.4
      関連 目:
    • setLoopbackMode

      @Deprecated(since="14") public void setLoopbackMode(boolean disable) throws SocketException
      非推奨。
      かわりに、DatagramSocket.setOption(SocketOption, Object)StandardSocketOptions.IP_MULTICAST_LOOPとともに使用してく さい。 ループバック・モードはデフォルトで有効になっており、MulticastSocket.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false)によって無効化されます。
      マルチキャスト・データグラ のローカル・ループバックを無効化/有効化します。 このオプションは、マルチキャスト・データをローカル・ソケットにループバックするかどうかを設定するためのヒントとして、プラットフォー ・ネットワーク・コードによって使用されます。

      このオプションはヒントなので、アプリケーションでループバック・モードの設定を調べる必要がある 合は、getLoopbackMode()を呼び出してく さい。

      パラメータ:
      disable−LoopbackModeを無効にする 合はtrue
      スロー:
      SocketException - 値の設定中にエラーが発生した 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.4
      関連 目:
    • getLoopbackMode

      @Deprecated(since="14") public boolean getLoopbackMode() throws SocketException
      非推奨。
      かわりに、DatagramSocket.getOption(SocketOption)StandardSocketOptions.IP_MULTICAST_LOOPとともに使用してく さい。
      マルチキャスト・データグラ のローカル・ループバックの設定値を取得します。
      戻り値:
      LoopbackModeが無効になった 合はtrue
      スロー:
      SocketException - 値の取得中にエラーが発生した 合、またはソケットが閉じている 合。
      導入されたバージョン:
      1.4
      関連 目:
    • send

      @Deprecated(forRemoval=true, since="1.4") public void send(DatagramPacket p, byte ttl) throws IOException
      削除予定のため非推奨: このAPI要 は、将来のバージョンで削除される可能性があります。
      かわりに、次のコードまたは同等のコードを使用します:
        ......
        int ttl = mcastSocket.getOption(StandardSocketOptions.IP_MULTICAST_TTL);
        mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, newttl);
        mcastSocket.send(p);
        mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl);
        ......
      ソケットのデフォルト以外のTTL (time-to-live)を使用してデータグラ ・パケットを宛先に送信します。 このメソッドを使用する必要があるのは、特定のTTLが必要とされる 合 けです。それ以外の 合は、このソケット上でTTLを一度 け設定し、そのデフォルトのTTLをすべてのパケットで使用することをお薦めします。 このメソッドは、ソケットのデフォルトのTTLを変更しません その動作は、setInterfaceの影響を受ける可能性があります。
      パラメータ:
      p−送信されるパケット。 パケットには、宛先のマルチキャストIPアドレスと送信対象のデータを含めるべきである。 ある宛先マルチキャスト・アドレスにパケットを送信するには、そのグループのメンバーである必要はない。
      ttl−マルチキャスト・パケットの有効期間(オプション)。デフォルトttl値は1。
      スロー:
      IOException - I/Oエラーが発生した 合、またはソケットが閉じている 合。
      PortUnreachableException - 現在到達不可能になっている宛先にソケットが接続されている 合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。
      IllegalArgumentException - ソケットが接続されていて、接続アドレスとパケット・アドレスが異なる 合、ソケットが接続されておらず、パケット・アドレスが設定されていない 合、またはポートが範囲外の 合。
      関連 目: