- すべての実装されたインタフェース:
Closeable,AutoCloseable
MulticastSocketは、IPマルチキャスト・データグラムの送受信に便利なデータグラム・ソケットです。 MulticastSocketコンストラクタは、マルチキャスト・データグラムの受信に適した適切なソケット・オプションを有効にしてソケットを作成します。 MulticastSocketクラスは、マルチキャスト・アプリケーションで一般的に使用されるソケット・オプションの便利なsetterメソッドとgetterメソッドをさらに定義します。
1つ以上のマルチキャスト・グループに参加すると、これらのグループに送信されたマルチキャスト・データグラムを受信できます。
IPv4マルチキャスト・グループは、クラスD IPアドレスと標準のUDPポート番号によって指定されます。 クラスD IPアドレスの範囲は、224.0.0.0から239.255.255.255までです。 アドレス224.0.0.0は予約されており、使用できません。
まず、目的のポートでMulticastSocketを作成し、次にjoinGroupメソッドを起動して、グループ・アドレスとマルチキャスト・データグラムを受信するネットワーク・インタフェースを指定します:
// join a Multicast group and send the group salutations
...
String msg = "Hello";
InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
InetSocketAddress group = new InetSocketAddress(mcastaddr, 6789);
NetworkInterface netIf = NetworkInterface.getByName("bge0");
MulticastSocket s = new MulticastSocket(6789);
s.joinGroup(new InetSocketAddress(mcastaddr, 0), netIf);
byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, group);
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, netIf);
マルチキャスト・グループにメッセージを送信すると、そのホストとポートのすべての参加者がメッセージを受け取ります(ただしパケットの有効期間内に限られる。詳細は後述)。 マルチキャスト・グループにメッセージを送信するためには、ソケットがそのマルチキャスト・グループのメンバーである必要はありません。
ソケットがマルチキャスト・グループまたはポートに参加すると、ほかのホストからそのグループまたはポートに送信されたデータグラムを受信することができます。そのグループとポートの他のメンバーもすべて同じデータグラムを受信します。 ソケットは、leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)メソッドによってグループ内のメンバーシップを放棄します。 「複数MulticastSockets」は、マルチキャスト・グループとポートを同時にサブスクライブでき、すべてのグループ・データグラムを受信します。
DatagramSocketクラスおよびMulticastSocketクラスは、いくつかのソケット・オプションを設定および取得するための便利なメソッドを定義しています。 このクラスは、DatagramSocketと同様、ソケット・オプションを設定および問合せするためのsetOptionおよびgetOptionメソッドもサポートしています。 サポートされているソケット・オプションのセットは、DatagramSocketで定義されます。 追加(実装固有)のオプションをサポートできる場合もあります。
- APIのノート:
DatagramSocketは、マルチキャスト・データグラムの送受信に直接使用できます。DatagramChannelは、MulticastChannelインタフェースを実装し、マルチキャスト・データグラムを送受信するための代替APIを提供します。MulticastChannelAPIは、any-sourceおよびsource-specificの両方のマルチキャストをサポートしています。 マルチキャストにDatagramChannelを使用することを検討してください。- 導入されたバージョン:
- 1.1
-
コンストラクタのサマリー
コンストラクタコンストラクタ説明マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。MulticastSocket(int port) マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。MulticastSocket(SocketAddress bindaddr) 指定されたローカル・ソケット・アドレスにバインドされたマルチキャスト・ソケットを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明非推奨。ネットワーク・インタフェースは、戻されたInetAddressによって一意に識別されない場合があります。boolean非推奨。このソケットから送信された送信マルチキャスト・データグラムのマルチキャスト・ネットワーク・インタフェース・セットを取得します。intこのソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。bytegetTTL()非推奨。かわりにgetTimeToLive()メソッドを使用し、byteのかわりにintを返します。voidjoinGroup(InetAddress mcastaddr) 非推奨。このメソッドは、マルチキャスト・グループに参加するネットワーク・インタフェースを受け入れません。voidjoinGroup(SocketAddress mcastaddr, NetworkInterface netIf) あるマルチキャスト・グループに参加します。voidleaveGroup(InetAddress mcastaddr) 非推奨。このメソッドは、マルチキャスト・グループから脱退するネットワーク・インタフェースを受け入れません。voidleaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) 指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。voidsend(DatagramPacket p, byte ttl) 非推奨。かわりに、次のコードまたは同等のコードを使用します:voidsetInterface(InetAddress inf) 非推奨。InetAddressではネットワーク・インタフェースを一意に識別できない場合があります。voidsetLoopbackMode(boolean disable) 非推奨。voidこのソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。voidsetTimeToLive(int ttl) マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。voidsetTTL(byte ttl) 非推奨。かわりにsetTimeToLive(int)メソッドを使用します。これは、ttlのタイプとしてbyteのかわりにintを使用します。クラスjava.net.DatagramSocketで宣言されたメソッド
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getOption, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setOption, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass, supportedOptions
-
コンストラクタの詳細
-
MulticastSocket
public MulticastSocket() throws IOExceptionマルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。 ソケットはwildcardアドレスにバインドされます。セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にその
checkListenメソッドが0を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。- スロー:
IOException- MulticastSocketの作成中に入出力例外が発生した場合SecurityException- セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。- 関連項目:
-
MulticastSocket
public MulticastSocket(int port) throws IOException マルチキャスト・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。 ソケットはwildcardアドレスにバインドされます。セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にその
checkListenメソッドがport引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。- パラメータ:
port- 使用するポート- スロー:
IOException- MulticastSocketの作成中に入出力例外が発生した場合SecurityException- セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。IllegalArgumentException- ポートが「範囲外です。」の場合- 関連項目:
-
MulticastSocket
public MulticastSocket(SocketAddress bindaddr) throws IOException 指定されたローカル・ソケット・アドレスにバインドされたマルチキャスト・ソケットを作成します。アドレスが
nullの場合、バインドされていないソケットが作成されます。セキュリティ・マネージャが存在する場合、最初にその
checkListenメソッドがSocketAddressポートを引数に指定して呼び出され、この操作が許可されるかどうかが確認されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)メソッドが呼び出されます。- パラメータ:
bindaddr−バインドするソケット・アドレス。アンバウンドのソケットの場合はnull。- スロー:
IOException- MulticastSocketの作成中に入出力例外が発生した場合SecurityException- セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。- 導入されたバージョン:
- 1.4
- 関連項目:
-
-
メソッドの詳細
-
setTTL
@Deprecated public void setTTL(byte ttl) throws IOException 非推奨。かわりにsetTimeToLive(int)メソッドを使用します。これは、ttlのタイプとしてbyteのかわりにintを使用します。マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。ttlは符号なし8ビット・データなので、
0 <= ttl <= 0xFFの範囲でなければいけません。- パラメータ:
ttl- 有効期間- スロー:
IOException- デフォルトの有効期間値の設定中に入出力例外が発生した場合- 関連項目:
-
setTimeToLive
public void setTimeToLive(int ttl) throws IOException マルチキャストのスコープを制御するために、このMulticastSocketから送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。ttlの範囲は
0 <= ttl <= 255でなければいけません。そうでない場合は、IllegalArgumentExceptionがスローされます。 TTLが0で送信されたマルチキャスト・パケットは、ネットワークでは転送されませんが、ローカルで転送されることがあります。- APIのノート:
- このメソッドは、
setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl)のコールと同等です。 - パラメータ:
ttl- 有効期間- スロー:
IOException- デフォルトの有効期間値の設定中に入出力例外が発生した場合- 導入されたバージョン:
- 1.2
- 関連項目:
-
getTTL
@Deprecated public byte getTTL() throws IOException非推奨。かわりにgetTimeToLive()メソッドを使用し、byteのかわりにintを返します。このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。- 戻り値:
- デフォルトの有効期間値
- スロー:
IOException- デフォルトの有効期間値の取得中に入出力例外が発生した場合- 関連項目:
-
getTimeToLive
public int getTimeToLive() throws IOExceptionこのソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。- APIのノート:
- このメソッドは、
getOption(StandardSocketOptions.IP_MULTICAST_TTL)のコールと同等です。 - 戻り値:
- デフォルトの有効期間値
- スロー:
IOException- デフォルトの有効期間値の取得中に入出力例外が発生した場合- 導入されたバージョン:
- 1.2
- 関連項目:
-
joinGroup
@Deprecated(since="14") public void joinGroup(InetAddress mcastaddr) throws IOException 非推奨。このメソッドは、マルチキャスト・グループに参加するネットワーク・インタフェースを受け入れません。 代わりにjoinGroup(SocketAddress, NetworkInterface)を使用してください。あるマルチキャスト・グループに参加します。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。- APIのノート:
- このメソッドの呼出しは、
joinGroup(new InetSocketAddress(mcastaddr, 0), null)の呼出しと同じです。 - パラメータ:
mcastaddr- 参加するマルチキャスト・アドレス- スロー:
IOException- 結合にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合SecurityException- セキュリティ・マネージャが存在し、そのcheckMulticastメソッドが参加を許可しない場合。- 関連項目:
-
leaveGroup
@Deprecated(since="14") public void leaveGroup(InetAddress mcastaddr) throws IOException 非推奨。このメソッドは、マルチキャスト・グループから脱退するネットワーク・インタフェースを受け入れません。 代わりにleaveGroup(SocketAddress, NetworkInterface)を使用してください。あるマルチキャスト・グループから離れます。 その動作は、setInterfaceまたはsetNetworkInterfaceの影響を受ける可能性があります。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。- APIのノート:
- このメソッドの呼出しは、
leaveGroup(new InetSocketAddress(mcastaddr, 0), null)の呼出しと同じです。 - パラメータ:
mcastaddr- 離れるマルチキャスト・アドレス- スロー:
IOException- 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。SecurityException- セキュリティ・マネージャが存在し、そのcheckMulticastメソッドでこの操作が許可されていない場合。- 関連項目:
-
joinGroup
public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException あるマルチキャスト・グループに参加します。マルチキャスト・グループに参加するには、コール元が参加するマルチキャスト・グループのIPアドレスを指定し、マルチキャスト・パケットを受信するローカル「ネットワーク・インタフェース」を指定する必要があります。
-
mcastaddr引数は、結合するマルチキャスト・グループのIPアドレスを示します。 履歴上の理由から、これはSocketAddressとして指定されます。 デフォルトの実装はInetSocketAddressのみをサポートし、port情報は無視されます。 -
netIf引数は、マルチキャスト・データグラム・パケットを受信するローカル・インタフェース、または送信マルチキャスト・データグラムのインタフェース・セットに遅延するnullを指定します。nullで、インタフェースが設定されていない場合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。
このメソッドを複数回呼び出して、複数の異なるマルチキャスト・グループを結合するか、複数の異なるネットワークで同じグループに参加することができます。 ただし、ソケットがすでにグループのメンバーである場合は、
IOExceptionがスローされます。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。- オーバーライド:
- クラス
DatagramSocketのjoinGroup - パラメータ:
mcastaddr- 、参加するマルチキャスト・アドレスを示します。netIf- マルチキャスト・データグラム・パケットを受信するローカル・インタフェース、またはnullを指定します。- スロー:
IOException- 結合にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合SecurityException- セキュリティ・マネージャが存在し、そのcheckMulticastメソッドが参加を許可しない場合。IllegalArgumentException- mcastaddrがnullであるか、このソケットでサポートされないSocketAddressサブクラスである場合- 導入されたバージョン:
- 1.4
- 関連項目:
-
-
leaveGroup
public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException 指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。- オーバーライド:
- クラス
DatagramSocketのleaveGroup - APIのノート:
mcastaddrおよびnetIf引数は、このDatagramSocketによって以前に「結合」であったマルチキャスト・グループを識別する必要があります。このメソッドを複数回呼び出して複数の異なるマルチキャスト・グループが以前に結合されたままになるか、同じグループを複数の異なるネットワークで以前に結合されたままにしておくことができます。 ただし、ソケットが指定されたネットワーク内の指定されたグループのメンバーでない場合、
IOExceptionがスローされます。- パラメータ:
mcastaddr- 離れるマルチキャスト・アドレス これには、グループの「結合」に使用されるものと同じIPアドレスが含まれている必要があります。netIf- 送信マルチキャスト・データグラムのインタフェース・セットに遅延するローカル・インタフェースまたはnullを指定します。nullで、インタフェースが設定されていない場合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。- スロー:
IOException- 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。SecurityException- セキュリティ・マネージャが存在し、そのcheckMulticastメソッドでこの操作が許可されていない場合。IllegalArgumentException- mcastaddrがnullの場合、またはこのソケットでサポートされないSocketAddressサブクラスである場合。- 導入されたバージョン:
- 1.4
- 関連項目:
-
setInterface
@Deprecated(since="14") public void setInterface(InetAddress inf) throws SocketException 非推奨。InetAddressではネットワーク・インタフェースを一意に識別できない場合があります。 代わりにsetNetworkInterface(NetworkInterface)を使用してください。ネットワーク・インタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャスト・ネットワーク・インタフェースを設定します。 マルチホームのホストに便利です。- パラメータ:
inf− InetAddress- スロー:
SocketException- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 関連項目:
-
getInterface
@Deprecated(since="14") public InetAddress getInterface() throws SocketException非推奨。ネットワーク・インタフェースは、戻されたInetAddressによって一意に識別されない場合があります。 代わりにgetNetworkInterface()を使用してください。マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを取得します。- 戻り値:
- マルチキャスト・パケットに使用されるネットワーク・インタフェースのアドレスを表す
InetAddress。または、インタフェースが設定されていない場合は、すべてのローカル・アドレスを表すInetAddressです。 - スロー:
SocketException- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 関連項目:
-
setNetworkInterface
public void setNetworkInterface(NetworkInterface netIf) throws SocketException このソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。- APIのノート:
- このメソッドは、
setOption(StandardSocketOptions.IP_MULTICAST_IF, netIf)のコールと同等です。 - パラメータ:
netIf−インタフェース- スロー:
SocketException- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 導入されたバージョン:
- 1.4
- 関連項目:
-
getNetworkInterface
public NetworkInterface getNetworkInterface() throws SocketExceptionこのソケットから送信された送信マルチキャスト・データグラムのマルチキャスト・ネットワーク・インタフェース・セットを取得します。- APIのノート:
- インタフェースが設定されている場合、このメソッドは
getOption(StandardSocketOptions.IP_MULTICAST_IF)の呼出しと同じです。 - 戻り値:
- マルチキャスト
NetworkInterfaceは現在設定されています。 プレースホルダーNetworkInterfaceは、インタフェースが設定されていない場合に返されます。ローカル・アドレスを表すInetAddressは1つのみです。 - スロー:
SocketException- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 導入されたバージョン:
- 1.4
- 関連項目:
-
setLoopbackMode
@Deprecated(since="14") public void setLoopbackMode(boolean disable) throws SocketException 非推奨。かわりに、DatagramSocket.setOption(SocketOption, Object)をStandardSocketOptions.IP_MULTICAST_LOOPとともに使用してください。 ループバック・モードはデフォルトで有効になっており、MulticastSocket.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false)によって無効化されます。マルチキャスト・データグラムのローカル・ループバックを無効化/有効化します。 このオプションは、マルチキャスト・データをローカル・ソケットにループバックするかどうかを設定するためのヒントとして、プラットフォーム・ネットワーク・コードによって使用されます。このオプションはヒントなので、アプリケーションでループバック・モードの設定を調べる必要がある場合は、
getLoopbackMode()を呼び出してください。- パラメータ:
disable−LoopbackModeを無効にする場合はtrue- スロー:
SocketException−値の設定中にエラーが発生した場合- 導入されたバージョン:
- 1.4
- 関連項目:
-
getLoopbackMode
@Deprecated(since="14") public boolean getLoopbackMode() throws SocketException非推奨。マルチキャスト・データグラムのローカル・ループバックの設定値を取得します。- 戻り値:
- LoopbackModeが無効になった場合はtrue
- スロー:
SocketException−値の取得中にエラーが発生した場合- 導入されたバージョン:
- 1.4
- 関連項目:
-
send
@Deprecated public void send(DatagramPacket p, byte ttl) throws IOException 非推奨。かわりに、次のコードまたは同等のコードを使用します:...... int ttl = mcastSocket.getOption(StandardSocketOptions.IP_MULTICAST_TTL); mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, newttl); mcastSocket.send(p); mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl); ......ソケットのデフォルト以外のTTL (time-to-live)を使用してデータグラム・パケットを宛先に送信します。 このメソッドを使用する必要があるのは、特定のTTLが必要とされる場合だけです。それ以外の場合は、このソケット上でTTLを一度だけ設定し、そのデフォルトのTTLをすべてのパケットで使用することをお薦めします。 このメソッドは、ソケットのデフォルトのTTLを変更しません。 その動作は、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メソッドが送信を許可しない場合。PortUnreachableException- 現在到達不可能になっている宛先にソケットが接続されている場合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。IllegalArgumentException- ソケットが接続されていて、接続アドレスとパケット・アドレスが異なる場合、ソケットが接続されておらず、パケット・アドレスが設定されていない場合、またはポートが範囲外の場合。- 関連項目:
-