モジュール java.base
パッケージ java.nio.channels

インタフェースMulticastChannel

すべてのスーパー・インタフェース:
AutoCloseable, Channel, Closeable, NetworkChannel
既知のすべての実装クラス:
DatagramChannel

public interface MulticastChannel extends NetworkChannel
IP (Internet Protocol)マルチキャストをサポートするネットワーク・チャネルです。

IPマルチキャストとは、単一の宛先アドレスで識別されたゼロ以上のホストであるグループのメンバーにIPデータグラムを転送することです。

IPv4ソケットへのチャネルの場合、基礎となるオペレーティング・システムはオプションでRFC 2236: Internet Group Managementプロトコル、バージョン2 (IGMPv2)をサポートします。 IGMPv2がサポートされている場合、オペレーティング・システムは、RFC 3376: Internet Group Managementプロトコル、バージョン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で同じグループに参加することもできます。 メンバーシップは、返されたMembershipKeydropメソッドを呼び出すことでドロップされます。 基本となるプラットフォームでソースのフィルタリングがサポートされる場合、blockメソッドとunblockメソッドを使用して、特定のソース・アドレスからマルチキャスト・データグラムをブロックまたはブロック解除することができます。

join(InetAddress,NetworkInterface,InetAddress)メソッドは、指定したソース・アドレスと一致するソース・アドレスを持つグループに送信されたデータグラムの受信を開始するために使用されます。 基本となるプラットフォームでソースのフィルタリングがサポートされない場合、このメソッドはUnsupportedOperationExceptionをスローします。 メンバーシップは累積され、同じグループとインタフェースでこのメソッドを再度呼び出して、ほかのソース・アドレスからのデータグラムを受信できるようにすることができます。 このメソッドは、指定されたソース・アドレスからのデータグラムを受信するためのメンバーシップを表すMembershipKeyを返します。 キーのdropメソッドを呼び出すと、ソース・アドレスからのデータグラムを受信できなくなるように、メンバーシップがドロップされます。

プラットフォームの依存性

マルチキャスト実装は、ネイティブ・マルチキャスト機能に直接マッピングすることを目的としています。 そのため、IPマルチキャスト・データグラムを受信するアプリケーションの開発時には、次の項目を考慮するべきです。
  1. チャネルの作成では、チャネルが参加するマルチキャスト・グループのアドレス・タイプに対応するProtocolFamilyを指定するべきです。 あるマルチキャスト・グループのアドレスが別のプロトコル・ファミリに対応するとき、一方のプロトコル・ファミリ内ソケットのチャネルの参加およびマルチキャスト・データグラム受信の可能性は保証されません。 たとえば、IPv6ソケットへのチャネルがIPv4マルチキャスト・グループに参加して、そのグループに送信されたマルチキャスト・データグラムを受信できるかどうかは実装によって異なります。

  2. チャネルのソケットは、ワイルドカード・アドレスにバインドするべきです。 ソケットが、ワイルドカード・アドレスではなく特定のアドレスにバインドされている場合、ソケットがマルチキャスト・データグラムを受信するかどうかは実装によって異なります。

  3. 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);

導入されたバージョン:
1.7
外部仕様