JavaTM Platform
Standard Ed. 6

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 アドレスの範囲は、239.255.255.255 から 224.0.0.0 までです。アドレス 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()
          推奨されていません。 代わりに getTimeToLive メソッドを使用してください。このメソッドは、byte ではなく int を返します。
 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)
          推奨されていません。 代わりに、次のコードまたはそれと同等のコードを使用してください。 ...... + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); ......
 void setInterface(InetAddress inf)
          ネットワークインタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャストネットワークインタフェースを設定します。
 void setLoopbackMode(boolean disable)
          マルチキャストデータグラムのローカルループバックを有効または無効にします。
 void setNetworkInterface(NetworkInterface netIf)
          このソケットから送信される送出マルチキャストデータグラム用のネットワークインタフェースを指定します。
 void setTimeToLive(int ttl)
          マルチキャストのスコープを制御するために、この MulticastSocket から送信されるマルチキャストパケットのデフォルトの有効期間を設定します。
 void setTTL(byte ttl)
          推奨されていません。 代わりに setTimeToLive メソッドを使用してください。このメソッドは ttl の型として、byte ではなく int を使用します。
 
クラス 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
推奨されていません。 代わりに 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 - 有効期間
例外:
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 の影響を受ける可能性があります。

セキュリティーマネージャーが存在する場合、最初にセキュリティーマネージャーの 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
推奨されていません。 代わりに、次のコードまたはそれと同等のコードを使用してください。 ...... + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); ......

このソケットのデフォルト以外の 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 Platform
Standard Ed. 6

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

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