クラス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(int port)
    マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。
    指定されたローカル・ソケット・アドレスにバインドされたマルチキャスト・ソケットを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    非推奨。
    ネットワーク・インタフェースは、戻されたInetAddressによって一意に識別されない場合があります。
    boolean
    非推奨。
    かわりに、DatagramSocket.getOption(SocketOption)StandardSocketOptions.IP_MULTICAST_LOOPとともに使用してください。
    このソケットから送信された送信マルチキャスト・データグラムのマルチキャスト・ネットワーク・インタフェース・セットを取得します。
    int
    このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。
    void
    非推奨。
    このメソッドは、マルチキャスト・グループに参加するネットワーク・インタフェースを受け入れません。
    void
    あるマルチキャスト・グループに参加します。
    void
    非推奨。
    このメソッドは、マルチキャスト・グループから脱退するネットワーク・インタフェースを受け入れません。
    void
    指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。
    void
    非推奨。
    InetAddressではネットワーク・インタフェースを一意に識別できない場合があります。
    void
    setLoopbackMode(boolean disable)
    非推奨。
    かわりに、DatagramSocket.setOption(SocketOption, Object)StandardSocketOptions.IP_MULTICAST_LOOPとともに使用してください。
    void
    このソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。
    void
    setTimeToLive(int ttl)
    マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。

    クラスで宣言されたメソッド DatagramSocket

    bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getOption, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setOption, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass, supportedOptions
    修飾子と型
    メソッド
    説明
    void
    このDatagramSocketを特定のアドレスおよびポートにバインドします。
    void
    このデータグラム・ソケットを閉じます。
    void
    connect(InetAddress address, int port)
    ソケットをこのソケットのリモート・アドレスに接続します。
    void
    このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。
    void
    ソケットを切断します。
    boolean
    SO_BROADCASTが有効かどうかを調べます。
    このデータグラム・ソケットに付けられた一意のDatagramChannelオブジェクトを返します(存在する場合)。
    このソケットの接続先のアドレスを返します。
    ソケットのバインド先のローカル・アドレスを取得します。
    int
    このソケットのバインド先となる、ローカル・ホスト上のポート番号を返します。
    このソケットのバインド先の端点のアドレスを返します。
    <T> T
    ソケット・オプションの値を返します。
    int
    このソケットの接続先のポート番号を返します。
    int
    このDatagramSocketのSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketでの入力にプラットフォームで使用されるサイズ(バイト単位)です。
    このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合はnullを返します。
    boolean
    SO_REUSEADDRが有効かどうかを調べます。
    int
    このDatagramSocketのSO_SNDBUFオプションの値を取得します。これは、プラットフォームがこのDatagramSocketの出力に使用するサイズ(バイト単位)です。
    int
    SO_TIMEOUTの設定を取得します。このオプションが無効(タイム・アウトが無限)の場合は0を返します。
    int
    このDatagramSocketから送信されるパケットのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型を取得します。
    boolean
    ソケットのバインディング状態を返します。
    boolean
    ソケットが閉じたかどうかを返します。
    boolean
    ソケットの接続状態を返します。
    void
    このソケットからのデータグラム・パケットを受信します。
    void
    このソケットからデータグラム・パケットを送信します。
    void
    setBroadcast(boolean on)
    SO_BROADCASTを有効または無効にします。
    static void
    非推奨。
    DatagramChannelを使用するか、またはサブクラスDatagramSocketを直接使用します。
    setOption(SocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    void
    SO_RCVBUFオプションを、このDatagramSocketに指定された値に設定します。
    void
    setReuseAddress(boolean on)
    SO_REUSEADDRソケット・オプションを有効または無効にします。
    void
    SO_SNDBUFオプションを、このDatagramSocketに指定された値に設定します。
    void
    setSoTimeout(int timeout)
    指定されたタイム・アウト(ミリ秒)を使ってSO_TIMEOUTを有効または無効にします。
    void
    このDatagramSocketから送信されるデータグラムのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型octetを設定します。
    このソケットでサポートされているソケット・オプションのセットを返します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • 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
      関連項目:
  • メソッドの詳細

    • 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
      関連項目:
    • 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
      関連項目: