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

クラスMulticastSocket

  • すべての実装されたインタフェース:
    Closeable, AutoCloseable

    public class MulticastSocket
    extends DatagramSocket
    マルチキャスト・データグラム・ソケット・クラスは、IPマルチキャスト・パケットを送受信する場合に役立ちます。 MulticastSocketは、インターネット上のほかのマルチキャスト・ホストの「グループ」に参加する機能が追加された(UDP) DatagramSocketです。

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

    マルチキャスト・グループに参加するには、最初に目的のポートでMulticastSocketを作成し、続いてjoinGroup(InetAddress groupAddr)メソッドを呼び出します。

     // join a Multicast group and send the group salutations
     ...
     String msg = "Hello";
     InetAddress group = InetAddress.getByName("228.5.6.7");
     MulticastSocket s = new MulticastSocket(6789);
     s.joinGroup(group);
     DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
                                 group, 6789);
     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);
     
    マルチキャスト・グループにメッセージを送信すると、そのホストとポートのすべての参加者がメッセージを受け取ります(ただしパケットの有効期間内に限られる。詳細は後述)。 マルチキャスト・グループにメッセージを送信するためには、ソケットがそのマルチキャスト・グループのメンバーである必要はありません。

    ソケットがマルチキャスト・グループまたはポートに参加すると、ほかのホストからそのグループまたはポートに送信されたデータグラムを受信することができます。そのグループとポートの他のメンバーもすべて同じデータグラムを受信します。 ソケットをグループから外すには、leaveGroup(InetAddress addr)メソッドを使用します。 複数のMulticastSocketが並行してマルチキャスト・グループとポートに参加することができ、それらのMulticastSocketはすべてグループ・データグラムを受信します。

    現在のところ、アプレットではマルチキャスト・ソケットを使用することはできません。

    導入されたバージョン:
    1.1
    • コンストラクタの詳細

      • MulticastSocket

        public MulticastSocket​(int port)
                        throws IOException
        特定のポートにバインドされたマルチキャスト・ソケットを作成します。

        セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にそのcheckListenメソッドがport引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。

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

        パラメータ:
        port - 使用するポート
        例外:
        IOException - MulticastSocketの作成中に入出力例外が発生した場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
        関連項目:
        SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)
      • MulticastSocket

        public MulticastSocket​(SocketAddress bindaddr)
                        throws IOException
        指定されたソケット・アドレスにバインドされたMulticastSocketを作成します。

        あるいは、アドレスがnullの場合は、アンバウンドのソケットを作成します。

        セキュリティ・マネージャが存在する場合、最初にそのcheckListenメソッドがSocketAddressポートを引数に指定して呼び出され、この操作が許可されるかどうかが確認されます。 この結果、SecurityExceptionがスローされることがあります。

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

        パラメータ:
        bindaddr−バインドするソケット・アドレス。アンバウンドのソケットの場合はnull
        例外:
        IOException - MulticastSocketの作成中に入出力例外が発生した場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
        導入されたバージョン:
        1.4
        関連項目:
        SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)
    • メソッドの詳細

      • setTTL

        @Deprecated
        public void setTTL​(byte ttl)
                    throws IOException
        非推奨。
        代わりにsetTimeToLiveメソッドを使用してください。このメソッドはttlの型として、byteではなくintを使用します。
        マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。

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

        パラメータ:
        ttl - 有効期間
        例外:
        IOException - デフォルトの有効期間値の設定中に入出力例外が発生した場合
        関連項目:
        getTTL()
      • setTimeToLive

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

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

        パラメータ:
        ttl - 有効期間
        例外:
        IOException - デフォルトの有効期間値の設定中に入出力例外が発生した場合
        関連項目:
        getTimeToLive()
      • getTTL

        @Deprecated
        public byte getTTL()
                    throws IOException
        非推奨。
        代わりにgetTimeToLiveメソッドを使用してください。このメソッドは、byteではなくintを返します。
        このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。
        戻り値:
        デフォルトの有効期間値
        例外:
        IOException - デフォルトの有効期間値の取得中に入出力例外が発生した場合
        関連項目:
        setTTL(byte)
      • getTimeToLive

        public int getTimeToLive()
                          throws IOException
        このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。
        戻り値:
        デフォルトの有効期間値
        例外:
        IOException - デフォルトの有効期間値の取得中に入出力例外が発生した場合
        関連項目:
        setTimeToLive(int)
      • joinGroup

        public void joinGroup​(InetAddress mcastaddr)
                       throws IOException
        あるマルチキャスト・グループに参加します。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。

        セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

        パラメータ:
        mcastaddr - 参加するマルチキャスト・アドレス
        例外:
        IOException - 接続にエラーがある場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドが参加を許可しない場合。
        関連項目:
        SecurityManager.checkMulticast(InetAddress)
      • leaveGroup

        public void leaveGroup​(InetAddress mcastaddr)
                        throws IOException
        あるマルチキャスト・グループから離れます。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。

        セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

        パラメータ:
        mcastaddr - 離れるマルチキャスト・アドレス
        例外:
        IOException - 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドでこの操作が許可されていない場合。
        関連項目:
        SecurityManager.checkMulticast(InetAddress)
      • joinGroup

        public void joinGroup​(SocketAddress mcastaddr,
                              NetworkInterface netIf)
                       throws IOException
        指定されたインタフェースで指定されたマルチキャスト・グループに参加します。

        セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

        パラメータ:
        mcastaddr - 参加するマルチキャスト・アドレス
        netIf - マルチキャスト・データグラム・パケットを受信するローカル・インタフェースを指定します。または、nullを指定して、setInterface(InetAddress)またはsetNetworkInterface(NetworkInterface)によって設定されているインタフェースに従います。
        例外:
        IOException - 接続にエラーがある場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドが参加を許可しない場合。
        IllegalArgumentException - mcastaddrがnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合
        導入されたバージョン:
        1.4
        関連項目:
        SecurityManager.checkMulticast(InetAddress)
      • leaveGroup

        public void leaveGroup​(SocketAddress mcastaddr,
                               NetworkInterface netIf)
                        throws IOException
        指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。

        セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

        パラメータ:
        mcastaddr - 離れるマルチキャスト・アドレス
        netIf - ローカル・インタフェースを指定します。または、nullを指定して、setInterface(InetAddress)またはsetNetworkInterface(NetworkInterface)によって設定されているインタフェースに従います。
        例外:
        IOException - 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドでこの操作が許可されていない場合。
        IllegalArgumentException - mcastaddrがnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合
        導入されたバージョン:
        1.4
        関連項目:
        SecurityManager.checkMulticast(InetAddress)
      • setInterface

        public void setInterface​(InetAddress inf)
                          throws SocketException
        ネットワーク・インタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャスト・ネットワーク・インタフェースを設定します。 マルチホームのホストに便利です。
        パラメータ:
        inf − InetAddress
        例外:
        SocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。
        関連項目:
        getInterface()
      • getInterface

        public InetAddress getInterface()
                                 throws SocketException
        マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを取得します。
        戻り値:
        マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを表すInetAddress
        例外:
        SocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。
        関連項目:
        setInterface(java.net.InetAddress)
      • setNetworkInterface

        public void setNetworkInterface​(NetworkInterface netIf)
                                 throws SocketException
        このソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。
        パラメータ:
        netIf−インタフェース
        例外:
        SocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。
        導入されたバージョン:
        1.4
        関連項目:
        getNetworkInterface()
      • getNetworkInterface

        public NetworkInterface getNetworkInterface()
                                             throws SocketException
        マルチキャスト・ネットワーク・インタフェース・セットを取得します。
        戻り値:
        現在設定されているマルチキャストNetworkInterface
        例外:
        SocketException - 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。
        導入されたバージョン:
        1.4
        関連項目:
        setNetworkInterface(NetworkInterface)
      • setLoopbackMode

        public void setLoopbackMode​(boolean disable)
                             throws SocketException
        マルチキャスト・データグラムのローカル・ループバックを有効または無効にします。このオプションは、マルチキャスト・データをローカル・ソケットにループ・バックするかどうかを設定するヒントとして、プラットフォームのネットワーク・コードが使います。

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

        パラメータ:
        disable−LoopbackModeを無効にする場合はtrue
        例外:
        SocketException−値の設定中にエラーが発生した場合
        導入されたバージョン:
        1.4
        関連項目:
        getLoopbackMode()
      • getLoopbackMode

        public boolean getLoopbackMode()
                                throws SocketException
        マルチキャスト・データグラムのローカル・ループバックの設定値を取得します。
        戻り値:
        LoopbackModeが無効になった場合はtrue
        例外:
        SocketException−値の取得中にエラーが発生した場合
        導入されたバージョン:
        1.4
        関連項目:
        setLoopbackMode(boolean)
      • send

        @Deprecated
        public void send​(DatagramPacket p,
                         byte ttl)
                  throws IOException
        非推奨。
        代わりに、次のコードまたはそれと同等のコードを使用してください。...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ......
        このソケットのデフォルト以外のTTL (有効期間)を使って、データグラム・パケットを宛先に送信します。 このメソッドを使用する必要があるのは、特定のTTLが必要とされる場合だけです。それ以外の場合は、このソケット上でTTLを一度だけ設定し、そのデフォルトのTTLをすべてのパケットで使用することをお薦めします。 このメソッドは、ソケットのデフォルトのTTLを変更しません その動作は、setInterfaceの影響を受ける可能性があります。

        セキュリティ・マネージャが存在する場合、このメソッドはまず、いくつかのセキュリティ・チェックを実行します。 最初に、p.getAddress().isMulticastAddress()がtrueの場合、このメソッドは引数としてp.getAddress()ttlを使い、セキュリティ・マネージャのcheckMulticastメソッドを呼び出します。 その式の評価がfalseの場合、このメソッドは代わりに、セキュリティ・マネージャのcheckConnectメソッドを、引数p.getAddress().getHostAddress()p.getPort()を指定して呼び出します。 それぞれのセキュリティ・マネージャ・メソッド呼出しの結果、操作が許可されない場合はSecurityExceptionがスローされます。

        パラメータ:
        p−送信されるパケット。 パケットには、宛先のマルチキャストIPアドレスと送信対象のデータを含めるべきである。 ある宛先マルチキャスト・アドレスにパケットを送信するには、そのグループのメンバーである必要はない。
        ttl−マルチキャスト・パケットの有効期間(オプション)。デフォルトttl値は1。
        例外:
        IOException−エラーが発生した場合、具体的にはttlの設定中にエラーが発生した場合に発行されます。
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastまたはcheckConnectメソッドが送信を許可しない場合。
        関連項目:
        DatagramSocket.send(java.net.DatagramPacket), DatagramSocket.receive(java.net.DatagramPacket), SecurityManager.checkMulticast(java.net.InetAddress, byte), SecurityManager.checkConnect(java.lang.String, int)