JavaTM 2 Platform
Standard Ed. 5.0

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)
          特定のポートにバインドされたマルチキャストソケットを作成します。
MulticastSocket(SocketAddress bindaddr)
          指定されたソケットアドレスにバインドされた MulticastSocket を作成します。
 
メソッドの概要
 InetAddress getInterface()
          マルチキャストパケットに使用するネットワークインタフェースのアドレスを取得します。
 boolean getLoopbackMode()
          マルチキャストデータグラムのローカルループバックの設定値を取得します。
 NetworkInterface getNetworkInterface()
          マルチキャストネットワークインタフェ−スセットを取得します。
 int getTimeToLive()
          このソケットから送信されるマルチキャストパケットのデフォルトの有効期間を取得します。
 byte getTTL()
          推奨されていません。 代わりに、byte ではなく int を返す getTimeToLive メソッドを使用します。
 void joinGroup(InetAddress mcastaddr)
          マルチキャストグループに参加します。
 void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
          指定されたインタフェースで指定されたマルチキャストグループに参加します。
 void leaveGroup(InetAddress mcastaddr)
          マルチキャストグループから離れます。
 void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
          指定されたローカルインタフェース上のマルチキャストグループから離れます。
 void send(DatagramPacket p, byte ttl)
          推奨されていません。 次のコードまたはそれと同等のコードを使用する: ...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ......
 void setInterface(InetAddress inf)
          ネットワークインタフェースの値によってその動作が影響を受けるメソッドが使用する、マルチキャストネットワークインタフェースを設定します。
 void setLoopbackMode(boolean disable)
          マルチキャストデータグラムのローカルループバックを有効または無効にします。
 void setNetworkInterface(NetworkInterface netIf)
          このソケットから送信される送出マルチキャストデータグラム用のネットワークインタフェースを指定します。
 void setTimeToLive(int ttl)
          マルチキャストのスコープを制御するために、この MulticastSocket から送信されるマルチキャストパケットのデフォルトの有効期間を設定します。
 void setTTL(byte ttl)
          推奨されていません。 代わりに、ttl の型として byte ではなく int を使う setTimeToLive メソッドを使用します。
 
クラス java.net.DatagramSocket から継承されたメソッド
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

MulticastSocket

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

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

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

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

MulticastSocket

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

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

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

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

MulticastSocket

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

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

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

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

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

setTTL

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

マルチキャストのスコープを制御するために、この MulticastSocket から送信されるマルチキャストパケットのデフォルトの有効期間を設定します。

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

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

setTimeToLive

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

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

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

getTTL

@Deprecated
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 または setNetworkInterface の影響を受けることがあります。

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

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

leaveGroup

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

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

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

joinGroup

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

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

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

leaveGroup

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

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

パラメータ:
mcastaddr - 離れるマルチキャストアドレス
netIf - ローカルインタフェースを指定する。setInterface(InetAddress) または setNetworkInterface(NetworkInterface) によって設定されたインタフェースに従う場合は null
例外:
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 であれば、このメソッドは最初に、セキュリティマネージャの 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
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。