JavaTM 2 Platform
Std. Ed. v1.3

java.net
クラス MulticastSocket

java.lang.Object
  |
  +--java.net.DatagramSocket
        |
        +--java.net.MulticastSocket

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 はすべて同じグループデータグラムを受信します。

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

導入されたバージョン:
JDK1.1

コンストラクタの概要
MulticastSocket()
          マルチキャストソケットを作成します。
MulticastSocket(int port)
          特定のポートにバインドされたマルチキャストソケットを作成します。
 
メソッドの概要
 InetAddress getInterface()
          マルチキャストパケットに使用するネットワークインタフェースのアドレスを取得します。
 int getTimeToLive()
          このソケットから送信されるマルチキャストパケットのデフォルトの有効期間を取得します。
 byte getTTL()
          推奨されていません。 代わりに、byte ではなく int を返す getTimeToLive メソッドを使用します。
 void joinGroup(InetAddress mcastaddr)
          マルチキャストグループに参加します。
 void leaveGroup(InetAddress mcastaddr)
          マルチキャストグループから離れます。
 void send(DatagramPacket p, byte ttl)
          そのソケットのデフォルト値以外の TTL (有効期間) を使用して、データグラムパケットを宛先に送信します。
 void setInterface(InetAddress inf)
          ネットワークインタフェースの値によってその動作が影響を受けるメソッドが使用する、マルチキャストネットワークインタフェースを設定します。
 void setTimeToLive(int ttl)
          このソケットで送出されるマルチキャストパケットの、デフォルトの有効期間 (TTL) を設定します。
 void setTTL(byte ttl)
          推奨されていません。 代わりに、ttl の型として byte ではなく int を使う setTimeToLive メソッドを使用します。
 
クラス java.net.DatagramSocket から継承したメソッド
close, connect, disconnect, getInetAddress, getLocalAddress, getLocalPort, getPort, getReceiveBufferSize, getSendBufferSize, getSoTimeout, receive, send, setDatagramSocketImplFactory, setReceiveBufferSize, setSendBufferSize, setSoTimeout
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

MulticastSocket

public MulticastSocket()
                throws IOException
マルチキャストソケットを作成します。

セキュリティマネージャが存在する場合、最初にセキュリティマネージャの checkListen が、引数として 0 を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

例外:
IOException - MulticastSocket の生成中に入出力例外が発生した場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
関連項目:
SecurityManager.checkListen(int)

MulticastSocket

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

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

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

setTTL

public void setTTL(byte ttl)
            throws IOException
推奨されていません。 代わりに、ttl の型として byte ではなく int を使う setTimeToLive メソッドを使用します。

このソケットで送出されるマルチキャストパケットの、デフォルトの有効期間 (TTL) を設定します。この TTL は、MulticastGroup に送信される DatagramPackets の IP 有効期間を設定することにより、有効期間が切れるまでにネットワーク上でパケットが転送される「ホップ」の数が指定されます。

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

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

setTimeToLive

public void setTimeToLive(int ttl)
                   throws IOException
このソケットで送出されるマルチキャストパケットの、デフォルトの有効期間 (TTL) を設定します。この TTL は、MulticastGroup に送信される DatagramPackets の IP 有効期間を設定することにより、有効期間が切れるまでにネットワーク上でパケットが転送される「ホップ」の数が指定されます。

ttl の範囲は 0 <= ttl <= 255なければなりません。そうでない場合は、IllegalArgumentException がスローされます。

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

getTTL

public byte getTTL()
            throws IOException
推奨されていません。 代わりに、byte ではなく int を返す getTimeToLive メソッドを使用します。

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

getTimeToLive

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

joinGroup

public void joinGroup(InetAddress mcastaddr)
               throws IOException
マルチキャストグループに参加します。動作は setInterface の影響をうけることがあります。

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

パラメータ:
mcastaddr - 参加するマルチキャストアドレス
例外:
IOException - 参加にエラーがあるか、アドレスがマルチキャストアドレスでない場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkMulticast メソッドが参加を許可しない場合
関連項目:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(InetAddress mcastaddr)
                throws IOException
マルチキャストグループから離れます。動作は setInterface の影響をうけることがあります。

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

パラメータ:
mcastaddr - 離れるマルチキャストアドレス
例外:
IOException - エラーが残っているか、アドレスがマルチキャストアドレスでない場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkMulticast メソッドがこの操作を許可しない場合
関連項目:
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)

send

public void send(DatagramPacket p,
                 byte ttl)
          throws IOException
そのソケットのデフォルト値以外の TTL (有効期間) を使用して、データグラムパケットを宛先に送信します。このメソッドは、特定の TTL を指定する必要がある場合にだけ使用します。それ以外の場合はそのソケットの TTL をいったん設定し、すべてのパケットにその TTL デフォルト値を使用するのが理想的です。このメソッドは、ソケットの TTL デフォルト値を変更しません。動作は setInterface の影響を受けることがあります。

セキュリティマネージャが存在する場合、このメソッドは最初になんらかのセキュリティチェックを実行します。p.getAddress().isMulticastAddress() が true であれば、このメソッドは最初に、セキュリティマネージャの checkMulticast メソッドを、引数として p.getAddress() および ttl を指定して呼び出します。上記の式の結果が 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)

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.