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

インタフェースMulticastChannel

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


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

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

    IPv4ソケットへのチャネルの場合、基盤となるオペレーティング・システムはオプションでRFC 2236: インターネット・グループ管理プロトコル、バージョン2 (IGMPv2)をサポートします。 IGMPv2がサポートされている場合、オペレーティング・システムは、RFC 3376: インターネット・グループ管理プロトコル、バージョン3 (IGMPv3)で指定されたソース・フィルタ・リングを追加サポートすることができます。 IPv6ソケットへのチャネルでは、同等の標準はRFC 2710: Multicast Listener Discovery (MLD) for IPv6RFC 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
    • メソッドの詳細

      • close

        void close​()
            throws IOException
        現在のチャネルをクローズします。

        チャネルがマルチキャスト・グループのメンバーである場合、メンバーシップはドロップされます。 返されたときに、membership-key無効になります。

        それ以外の場合は、このメソッドはChannelインタフェースの指定どおりに動作します。

        定義:
        close、インタフェース: AutoCloseable
        定義:
        close、インタフェース: Channel
        定義:
        close、インタフェース: Closeable
        例外:
        IOException - 入出力エラーが発生した場合
      • join

        MembershipKey join​(InetAddress group,
                           NetworkInterface interf)
                    throws IOException
        マルチキャスト・グループに参加してそのグループに送信されるすべてのデータグラムの受信を開始し、メンバー鍵を返します。

        このチャネルが現在、すべてのデータグラムを受信するために、指定したインタフェース上のグループのメンバーである場合、そのメンバーシップを表すメンバー鍵が返されます。 それ以外の場合は、このチャネルはグループに参加し、結果の新しいメンバー鍵が返されます。 結果のメンバー鍵はソース固有ではありません。

        マルチキャスト・チャネルは、複数のインタフェース上の同一グループを含む、複数のマルチキャスト・グループに参加できます。 実装によっては、同時に参加できるグループの数に関する制限が適用される場合があります。

        パラメータ:
        group - 参加するマルチキャスト・アドレス
        interf - グループに参加するためのネットワーク・インタフェース
        戻り値:
        メンバー鍵
        例外:
        IllegalArgumentException - groupパラメータがマルチキャスト・アドレスではないか、groupパラメータが、このチャネルでサポートされないアドレス・タイプである場合
        IllegalStateException - チャネルに、インタフェース上のグループのソース固有のメンバーシップがすでにある場合
        UnsupportedOperationException - チャネル・ソケットがインターネット・プロトコル・ソケットでない場合、またはプラットフォームがマルチキャストをサポートしていない場合
        ClosedChannelException - このチャネルがクローズしている場合
        IOException - 入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドがマルチキャスト・グループへのアクセスを拒否した場合
      • join

        MembershipKey join​(InetAddress group,
                           NetworkInterface interf,
                           InetAddress source)
                    throws IOException
        マルチキャスト・グループに参加して、指定されたソース・アドレスからそのグループに送信されるデータグラムの受信を開始します。

        このチャネルが現在、指定されたソース・アドレスからのデータグラムを受信するために、指定されたインタフェース上のグループのメンバーである場合、そのメンバーシップを表すメンバー鍵が返されます。 それ以外の場合は、このチャネルはグループに参加し、結果の新しいメンバー鍵が返されます。 結果のメンバー鍵はソース固有です。

        メンバーシップは累積され、同じグループとインタフェースでこのメソッドを再度呼び出して、ほかのソース・アドレスによってグループに送信されたデータグラムを受信できるようにすることができます。

        パラメータ:
        group - 参加するマルチキャスト・アドレス
        interf - グループに参加するためのネットワーク・インタフェース
        source - ソース・アドレス
        戻り値:
        メンバー鍵
        例外:
        IllegalArgumentException - groupパラメータがマルチキャスト・アドレスではないか、sourceパラメータがユニキャスト・アドレスではないか、groupパラメータが、このチャネルでサポートされないアドレス・タイプであるか、sourceパラメータがグループと同じアドレス・タイプではない場合
        IllegalStateException - チャネルが現在、すべてのデータグラムを受信するために、指定したインタフェース上のグループのメンバーである場合
        UnsupportedOperationException - チャネル・ソケットがインターネット・プロトコル・ソケットでない場合、またはソース・フィルタ・リングがサポートされていない場合、またはプラットフォームがマルチキャストをサポートしていない場合
        ClosedChannelException - このチャネルがクローズしている場合
        IOException - 入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドがマルチキャスト・グループへのアクセスを拒否した場合