支持Internet协议(IP)多播的网络通道。
IP多播是将IP数据报传输到由单个目标地址标识的零个或多个主机的组的成员。
一个通道可以加入多个多播组,并可以在几个interfaces上加入同一个组。 通过在返回的MembershipKey上调用drop方法来删除成员资格。 如果底层平台支持源过滤,则可以使用block和unblock方法来阻止或取消阻止来自特定源地址的多播数据报。
成员资格是累积的 ,可以使用相同的组和接口再次调用此方法,以允许从其他源地址接收数据报。 该方法返回MembershipKey ,表示从给定源地址接收数据报的成员资格。 调用密钥的drop方法会删除成员资格,以便无法再接收来自源地址的数据报。
平台依赖
多播实现旨在直接映射到本机多播设施。
因此,在开发接收IP多播数据报的应用程序时,应考虑以下各项:
通道的创建应指定ProtocolFamily ,该通信将与通道将加入的多播组的地址类型相对应。 当多播组的地址对应于另一个协议族时,无法保证一个协议族中的套接字的通道可以加入和接收多播数据报。 例如,如果到IPv6套接字的通道可以加入IPv4多播组并接收发送到该组的多播数据报,则它是特定于实现的。
通道的套接字应绑定到wildcard地址。 如果套接字绑定到特定地址而不是通配符地址,那么如果套接字接收到多播数据报,则它是特定于实现的。
这是允许组的多个成员绑定到同一地址所必需的。
用法示例:
// 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);
关闭此频道。
加入多播组以开始接收发送给该组的所有数据报,并返回成员资格密钥。
加入多播组以开始接收从给定源地址发送到该组的数据报。
关闭此频道。
否则,此方法的行为与Channel接口指定的完全相同 。
加入多播组以开始接收发送给该组的所有数据报,并返回成员资格密钥。
如果此通道当前是给定接口上的组的成员以接收所有数据报,则返回表示该成员资格的成员资格密钥。 否则,此通道将加入组,并返回生成的新成员资格密钥。
组播信道可以加入多个组播组,包括多个接口上的同一组。 实现可以对可以同时加入的组的数量施加限制。
加入多播组以开始接收从给定源地址发送到该组的数据报。
如果此通道当前是给定接口上的组的成员,以从给定的源地址接收数据报,则返回表示该成员资格的成员资格密钥。 否则,此通道将加入组,并返回生成的新成员资格密钥。
成员资格是累积的,并且可以使用相同的组和接口再次调用此方法,以允许接收由其他源地址发送到该组的数据报。
变量和类型
方法
描述
void
关闭此频道。
加入多播组以开始接收发送给该组的所有数据报,并返回成员资格密钥。