public class MulticastSocket extends 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 はすべて同じグループデータグラムを受信します。
現在のところ、アプレットではマルチキャストソケットを使用することはできません。
| コンストラクタと説明 |
|---|
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)
非推奨。
代わりに、次のコードまたはそれと同等のコードを使用してください。...... 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)
非推奨。
代わりに setTimeToLive メソッドを使用してください。このメソッドは ttl の型として、byte ではなく int を使用します。
|
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, setTrafficClasspublic MulticastSocket()
throws IOException
セキュリティーマネージャーが存在する場合、この操作が許可されるように、最初にその checkListen メソッドが 0 を引数に指定して呼び出されます。この結果、SecurityException がスローされることがあります。
ソケットが作成されると、SO_REUSEADDR ソケットオプションを有効にするために、DatagramSocket.setReuseAddress(boolean) メソッドが呼び出されます。
IOException - MulticastSocket の作成中に入出力例外が発生した場合SecurityException - セキュリティーマネージャーが存在し、その checkListen メソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)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)public MulticastSocket(SocketAddress bindaddr) throws IOException
あるいは、アドレスが null の場合は、アンバウンドのソケットを作成します。
セキュリティーマネージャーが存在する場合、最初にその checkListen メソッドが SocketAddress ポートを引数に指定して呼び出され、この操作が許可されるかどうかが確認されます。この結果、SecurityException がスローされることがあります。
ソケットが作成されると、SO_REUSEADDR ソケットオプションを有効にするために、DatagramSocket.setReuseAddress(boolean) メソッドが呼び出されます。
bindaddr − バインドするソケットアドレス。アンバウンドのソケットの場合は null。IOException - MulticastSocket の作成中に入出力例外が発生した場合SecurityException - セキュリティーマネージャーが存在し、その checkListen メソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)@Deprecated public void setTTL(byte ttl) throws IOException
MulticastSocket から送信されるマルチキャストパケットのデフォルトの有効期間を設定します。
ttl は符号なし 8 ビットデータなので、 0 <= ttl <= 0xFF の範囲でなければいけません。
ttl - 有効期間IOException - デフォルトの有効期間値の設定中に入出力例外が発生した場合getTTL()public void setTimeToLive(int ttl)
throws IOException
MulticastSocket から送信されるマルチキャストパケットのデフォルトの有効期間を設定します。
ttl の範囲は 0 <= ttl <= 255 でなければいけません。そうでない場合は、IllegalArgumentException がスローされます。TTL が 0 で送信されたマルチキャストパケットは、ネットワークでは転送されませんが、ローカルで転送されることがあります。
ttl - 有効期間IOException - デフォルトの有効期間値の設定中に入出力例外が発生した場合getTimeToLive()@Deprecated public byte getTTL() throws IOException
IOException - デフォルトの有効期間値の取得中に入出力例外が発生した場合setTTL(byte)public int getTimeToLive()
throws IOException
IOException - デフォルトの有効期間値の取得中に入出力例外が発生した場合setTimeToLive(int)public void joinGroup(InetAddress mcastaddr) throws IOException
setInterface または setNetworkInterface の影響を受ける可能性があります。
セキュリティーマネージャーが存在する場合、このメソッドは最初に、mcastaddr を引数に指定して checkMulticast メソッドを呼び出します。
mcastaddr - 参加するマルチキャストアドレスIOException - 参加時にエラーが発生した場合、またはアドレスがマルチキャストアドレスでない場合。SecurityException - セキュリティーマネージャーが存在し、その checkMulticast メソッドが参加を許可しない場合。SecurityManager.checkMulticast(InetAddress)public void leaveGroup(InetAddress mcastaddr) throws IOException
setInterface または setNetworkInterface の影響を受ける可能性があります。
セキュリティーマネージャーが存在する場合、このメソッドは最初に、mcastaddr を引数に指定して checkMulticast メソッドを呼び出します。
mcastaddr - 離れるマルチキャストアドレスIOException - 離れる際にエラーが発生した場合、またはアドレスがマルチキャストアドレスでない場合。SecurityException - セキュリティーマネージャーが存在し、その checkMulticast メソッドでこの操作が許可されていない場合。SecurityManager.checkMulticast(InetAddress)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 サブクラスである場合SecurityManager.checkMulticast(InetAddress)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 サブクラスである場合SecurityManager.checkMulticast(InetAddress)public void setInterface(InetAddress inf) throws SocketException
inf − InetAddressSocketException - 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。getInterface()public InetAddress getInterface() throws SocketException
InetAddress。SocketException - 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。setInterface(java.net.InetAddress)public void setNetworkInterface(NetworkInterface netIf) throws SocketException
netIf − インタフェースSocketException - 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。getNetworkInterface()public NetworkInterface getNetworkInterface() throws SocketException
NetworkInterfaceSocketException - 使用しているプロトコルでエラー (TCP エラーなど) が発生した場合。setNetworkInterface(NetworkInterface)public void setLoopbackMode(boolean disable)
throws SocketException
このオプションはヒントなので、アプリケーションでループバックモードの設定を調べる必要がある場合は、getLoopbackMode() を呼び出してください。
disable − LoopbackMode を無効にする場合は trueSocketException − 値の設定中にエラーが発生した場合getLoopbackMode()public boolean getLoopbackMode()
throws SocketException
SocketException − 値の取得中にエラーが発生した場合setLoopbackMode(boolean)@Deprecated public void send(DatagramPacket p, byte ttl) throws IOException
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) バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.