Java プラットフォーム 1.2

java.net
クラス MulticastSocket

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

public class MulticastSocket
extends DatagramSocket

マルチキャストデータグラムソケットクラスは、IP マルチキャストパケットを送受信するときに役立ちます。MulticastSocket は、インターネット上の他のマルチキャストホストの「グループ」に参加する追加機能を持つ (UDP) DatagramSocket です。

マルチキャストグループを指定するには、クラス D の IP アドレス (224.0.0.1239.255.255.255 の範囲) と標準的な UDP ポート番号を使用します。マルチキャストグループに参加するには、まず目的のポートを使用して MulticastSocket を作成し、次に joinGroup(InetAddress groupAddr) メソッドを呼び出します。次に例を示します。

 // join a Multicast group and send the group salutations
 ...
 byte[] msg = {'H', 'e', 'l', 'l', 'o'};
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg, 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()
          推奨されません。 代わりに getTimeToLive メソッドを使用してください。このメソッドでは、有効期間を 0 〜 255 (0 は含まない) の範囲で取得可能です。
 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)
          推奨されません。 代わりに setTimeToLive メソッドを使用してください。このメソッドでは、有効期間を 0 〜 255 (0 は含まない) の範囲で設定可能です。
 
クラス java.net.DatagramSocket から継承したメソッド
close, connect, disconnect, getInetAddress, getLocalAddress, getLocalPort, getPort, getReceiveBufferSize, getSendBufferSize, getSoTimeout, receive, send, 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 になることがあります。

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

MulticastSocket

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

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

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

setTTL

public void setTTL(byte ttl)
            throws IOException
推奨されません。 代わりに setTimeToLive メソッドを使用してください。このメソッドでは、有効期間を 0 〜 255 (0 は含まない) の範囲で設定可能です。
このソケットで送信されるマルチキャストパケットの、デフォルトの有効期間 (TTL) を設定します。この TTL は、MulticastGroup に送信される DatagramPackets の IP 有効期間を設定し、有効期間が切れるまでにパケットが転送される「ホップ」の数を指定します。

このメソッドは、有効期間の値を 1 〜 127 の範囲に設定する場合にだけ使用できます。値がこの範囲内にない場合、このメソッドの動作は保証されません。

パラメータ:
ttl - 有効期間

setTimeToLive

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

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

パラメータ:
ttl - 有効期間

getTTL

public byte getTTL()
            throws IOException
推奨されません。 代わりに getTimeToLive メソッドを使用してください。このメソッドでは、有効期間を 0 〜 255 (0 は含まない) の範囲で取得可能です。
このソケットで送出されるマルチキャストパケットの、デフォルトの有効期間を設定します。このメソッドは、127 よりも大きい ttl の値を、127 に切りつめます。

getTimeToLive

public int getTimeToLive()
                  throws IOException
このソケットから送信されるマルチキャストパケットのデフォルトの有効期間を取得します。

joinGroup

public void joinGroup(InetAddress mcastaddr)
               throws IOException
マルチキャストグループに参加します。

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

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

leaveGroup

public void leaveGroup(InetAddress mcastaddr)
                throws IOException
マルチキャストグループから外れます。

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

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

setInterface

public void setInterface(InetAddress inf)
                  throws SocketException
このソケットのマルチキャストパケット用の、出力用ネットワークインタフェースを、システムのデフォルト値以外に設定します。マルチホームのホストに便利です。

getInterface

public InetAddress getInterface()
                         throws SocketException
マルチキャストパケットに使用するネットワークインタフェースのアドレスを取得します。

send

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

セキュリティマネージャが存在する場合、このメソッドはまずなんらかのセキュリティチェックを実行します。p.getAddress().isMulticastAddress() が true であれば、このメソッドは最初に、セキュリティマネージャの checkMulticast メソッドを、引数として p.getAddress() および ttl を指定して呼び出します。上記の式の結果が false である場合、このメソッドは代わりにセキュリティマネージャの checkConnect メソッドを、引数として p.getAddress().getHostAddress() および p.getPort() を指定して呼び出します。この操作が許可されていない場合、セキュリティマネージャの各メソッド呼び出しの結果は、SecurityException になることがあります。

パラメータ:
p - 送信するパケット。パケットには宛先マルチキャスト IP アドレスと、送信データが含まれる。宛先マルチキャストアドレスにパケットを送信するためには、そのグループのメンバである必要はない
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)

Java プラットフォーム 1.2

バグや機能要求の報告
新しい javadoc の表示についてのコメントやご提案
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.