public interface MulticastChannel extends NetworkChannel
IP マルチキャストとは、単一の宛先アドレスで識別されたゼロ以上のホストであるグループのメンバーに IP データグラムを転送することです。
IPv4 ソケットへのチャネルの場合、基本となるオペレーティングシステムでは「RFC 2236: Internet Group Management Protocol, Version 2 (IGMPv2)」がサポートされます。. これは、「RFC 3376: Internet Group Management Protocol, Version 3 (IGMPv3)」で指定されているように、オプションでソースのフィルタリングをサポートすることがあります。IPv6 ソケットへのチャネルでは、同等の標準は「RFC 2710: Multicast Listener Discovery (MLD) for IPv6」と「RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6」です。
join(InetAddress,NetworkInterface) メソッドは、グループに参加し、そのグループに送信されるすべてのマルチキャストデータグラムを受信するために使用されます。チャネルは複数のマルチキャストグループに参加することも、複数の interfaces で同じグループに参加することもできます。メンバーシップは、返された MembershipKey で drop メソッドを呼び出すことでドロップされます。基本となるプラットフォームでソースのフィルタリングがサポートされる場合、block メソッドと unblock メソッドを使用して、特定のソースアドレスからマルチキャストデータグラムをブロックまたはブロック解除することができます。
join(InetAddress,NetworkInterface,InetAddress) メソッドは、指定したソースアドレスと一致するソースアドレスを持つグループに送信されたデータグラムの受信を開始するために使用されます。基本となるプラットフォームでソースのフィルタリングがサポートされない場合、このメソッドは UnsupportedOperationException をスローします。メンバーシップは累積され、同じグループとインタフェースでこのメソッドを再度呼び出して、ほかのソースアドレスからのデータグラムを受信できるようにすることができます。このメソッドは、指定されたソースアドレスからのデータグラムを受信するためのメンバーシップを表す MembershipKey を返します。キーの drop メソッドを呼び出すと、ソースアドレスからのデータグラムを受信できなくなるように、メンバーシップがドロップされます。
チャネルの作成では、チャネルが参加するマルチキャストグループのアドレスタイプに対応する ProtocolFamily を指定するべきです。あるマルチキャストグループのアドレスが別のプロトコルファミリに対応するとき、一方のプロトコルファミリ内ソケットのチャネルの参加およびマルチキャストデータグラム受信の可能性は保証されません。たとえば、IPv6 ソケットへのチャネルが IPv4 マルチキャストグループに参加して、そのグループに送信されたマルチキャストデータグラムを受信できるかどうかは実装によって異なります。
チャネルのソケットは、ワイルドカードアドレスにバインドするべきです。ソケットが、ワイルドカードアドレスではなく特定のアドレスにバインドされている場合、ソケットがマルチキャストデータグラムを受信するかどうかは実装によって異なります。
SO_REUSEADDR オプションは、ソケットをバインドする前に有効にしてください。これは、グループの複数のメンバーを同じアドレスにバインドできるようにするために必要です。
使用例:
// join multicast group on this interface, and also use this
// interface for outgoing multicast datagrams
NetworkInterface ni = NetworkInterface.getByName("hme0");
DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
.setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(5000))
.setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
InetAddress group = InetAddress.getByName("225.4.5.6");
MembershipKey key = dc.join(group, ni);
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
close()
現在のチャネルをクローズします。
|
MembershipKey |
join(InetAddress group, NetworkInterface interf)
マルチキャストグループに参加してそのグループに送信されるすべてのデータグラムの受信を開始し、メンバー鍵を返します。
|
MembershipKey |
join(InetAddress group, NetworkInterface interf, InetAddress source)
マルチキャストグループに参加して、指定されたソースアドレスからそのグループに送信されるデータグラムの受信を開始します。
|
bind, getLocalAddress, getOption, setOption, supportedOptionsvoid close()
throws IOException
チャネルがマルチキャストグループのメンバーである場合、メンバーシップはドロップされます。返されたときに、membership-key は無効になります。
それ以外の場合は、このメソッドは Channel インタフェースの指定どおりに動作します。
close、インタフェース: AutoCloseableclose、インタフェース: Channelclose、インタフェース: CloseableIOException - 入出力エラーが発生した場合MembershipKey join(InetAddress group, NetworkInterface interf) throws IOException
このチャネルが現在、すべてのデータグラムを受信するために、指定したインタフェース上のグループのメンバーである場合、そのメンバーシップを表すメンバー鍵が返されます。それ以外の場合は、このチャネルはグループに参加し、結果の新しいメンバー鍵が返されます。結果のメンバー鍵はソース固有ではありません。
マルチキャストチャネルは、複数のインタフェース上の同一グループを含む、複数のマルチキャストグループに参加できます。実装によっては、同時に参加できるグループの数に関する制限が適用される場合があります。
group - 参加するマルチキャストアドレスinterf - グループに参加するためのネットワークインタフェースIllegalArgumentException - group パラメータがマルチキャストアドレスではないか、group パラメータが、このチャネルでサポートされないアドレスタイプである場合IllegalStateException - チャネルに、インタフェース上のグループのソース固有のメンバーシップがすでにある場合UnsupportedOperationException - チャネルのソケットが IP (Internet Protocol) ソケットではない場合ClosedChannelException - このチャネルがクローズしている場合IOException - 入出力エラーが発生した場合SecurityException - セキュリティーマネージャーが存在し、その checkMulticast メソッドがマルチキャストグループへのアクセスを拒否した場合MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source) throws IOException
このチャネルが現在、指定されたソースアドレスからのデータグラムを受信するために、指定されたインタフェース上のグループのメンバーである場合、そのメンバーシップを表すメンバー鍵が返されます。それ以外の場合は、このチャネルはグループに参加し、結果の新しいメンバー鍵が返されます。結果のメンバー鍵はソース固有です。
メンバーシップは累積され、同じグループとインタフェースでこのメソッドを再度呼び出して、ほかのソースアドレスによってグループに送信されたデータグラムを受信できるようにすることができます。
group - 参加するマルチキャストアドレスinterf - グループに参加するためのネットワークインタフェースsource - ソースアドレスIllegalArgumentException - group パラメータがマルチキャストアドレスではないか、source パラメータがユニキャストアドレスではないか、group パラメータが、このチャネルでサポートされないアドレスタイプであるか、source パラメータがグループと同じアドレスタイプではない場合IllegalStateException - チャネルが現在、すべてのデータグラムを受信するために、指定したインタフェース上のグループのメンバーである場合UnsupportedOperationException - チャネルのソケットが IP (Internet Protocol) ソケットではないか、ソースのフィルタリングがサポートされない場合ClosedChannelException - このチャネルがクローズしている場合IOException - 入出力エラーが発生した場合SecurityException - セキュリティーマネージャーが存在し、その checkMulticast メソッドがマルチキャストグループへのアクセスを拒否した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.