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

クラスMulticastSocket

java.lang.Object
java.net.DatagramSocket
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);
 byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
 DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.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() throws IOException
      マルチキャスト・ソケットを作成します。

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

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

      例外:
      IOException - MulticastSocketの作成中に入出力例外が発生した場合
      SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
      関連項目:
      SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean), DatagramSocketImpl.setOption(SocketOption, Object)
    • 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

      @Deprecatedpublic 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

      @Deprecatedpublic 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)