-  
       - All Superinterfaces:
-  
         AutoCloseable,Channel,Closeable,NetworkChannel
 - 所有已知实现类:
-  
         DatagramChannel
 
 
 public interface MulticastChannel extends NetworkChannel 支持互联网协议(IP)组播的网络通道。IP组播是将IP数据报传输到由单个目标地址标识的零个或多个主机的组的成员。 在通道到 IPv4插槽的情况下,底层操作系统可选地支持RFC 2236: Internet Group Management Protocol, Version 2 (IGMPv2) 。 当支持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方法删除成员身份,以便不再接收来自源地址的数据报。平台依赖多播实现旨在直接映射到本地多播设施。 因此,在开发接收IP组播数据报的应用程序时,应考虑以下项目:- 通道的创建应指定与通道将加入的多播组的地址类型相对应的 - ProtocolFamily。 当组播组的地址对应于另一个协议族时,不能保证一个协议族中的套接字的通道可以加入和接收组播数据报。 例如,如果到- IPv6套接字的通道可以加入- IPv4组播组并接收发送到该组的组播数据报,那么它是实现特定的。
- 频道的套接字应该绑定到 - wildcard地址。 如果套接字绑定到特定地址,而不是通配符地址,那么如果套接字接收到组播数据报,那么它是实现特定的。
- SO_REUSEADDR选项应在- binding套接字之前启用。 这是允许组中的多个成员绑定到相同地址所必需的。
 用法示例: // 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
 
-  
        
       -  
             方法摘要所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 voidclose()关闭此频道。MembershipKeyjoin(InetAddress group, NetworkInterface interf)加入组播组,开始接收发送到组的所有数据报,返回成员密钥。MembershipKeyjoin(InetAddress group, NetworkInterface interf, InetAddress source)加入组播组,开始从给定的源地址接收发送到组的数据报。-  
               Methods inherited from interface java.nio.channels.NetworkChannelbind, getLocalAddress, getOption, setOption, supportedOptions
 
-  
               
 
-  
             
-  
        
       -  
             方法详细信息-  closevoid close() throws IOException- Specified by:
-  
              close在接口AutoCloseable
- Specified by:
-  
              close在接口Channel
- Specified by:
-  
              close在接口Closeable
- 异常
-  
              IOException- 如果发生I / O错误
 
 -  joinMembershipKey join(InetAddress group, NetworkInterface interf) throws IOException 加入组播组,开始接收发送到组的所有数据报,返回成员密钥。如果此通道当前是给定接口上的组的成员以接收所有数据报,则返回表示该成员身份的成员资格。 否则,此通道加入组,并返回所得到的新会员密钥。 所得到的会员密钥不是 source-specific。组播信道可以加入多个组播组,包括多个接口上的同一组播组。 实施可能会对可能同时加入的组的数量施加限制。 - 参数
-  
              group- 要加入的组播地址
-  
              interf- 要加入组的网络接口
- 结果
- 会员密钥
- 异常
-  
              IllegalArgumentException- 如果组参数不是multicast地址,或者组参数是此通道不支持的地址类型
-  
              IllegalStateException- 如果通道在接口上已经具有该组的源特定成员资格
-  
              UnsupportedOperationException- 如果通道的套接字不是Internet协议套接字,或者平台不支持组播
-  
              ClosedChannelException- 如果此通道关闭
-  
              IOException- 如果发生I / O错误
-  
              SecurityException- 如果设置了安全管理器,并且其checkMulticast方法拒绝对多组组的访问
 
 -  joinMembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source) throws IOException 加入组播组,开始从给定的源地址接收发送到组的数据报。如果此通道当前是给定接口上的组的成员,以从给定的源地址接收数据报,则返回表示该成员资格的成员资格。 否则,此通道加入组,并返回所得到的新会员密钥。 所得的会员密钥为 source-specific。成员资格是累积的,并且可以使用相同的组和接口再次调用此方法,以允许接收其他源地址发送给组的数据报。 - 参数
-  
              group- 要加入的组播地址
-  
              interf- 要加入组的网络接口
-  
              source- 源地址
- 结果
- 会员密钥
- 异常
-  
              IllegalArgumentException- 如果组参数不是multicast地址,则源参数不是单播地址,组参数是此通道不支持的地址类型,或者源参数与组的地址类型不同
-  
              IllegalStateException- 如果通道当前是给定接口上的组的成员以接收所有数据报
-  
              UnsupportedOperationException- 如果通道的套接字不是Internet协议套接字,或不支持源过滤,或者平台不支持组播
-  
              ClosedChannelException- 如果此通道关闭
-  
              IOException- 如果发生I / O错误
-  
              SecurityException- 如果设置了安全管理员,并且其checkMulticast方法拒绝对多组组的访问
 
 
-  
 
-