java.lang.Object
java.nio.channels.MembershipKey
表示互联网协议(IP)多播组成员资格的令牌。
成员密钥可以表示接收发送到组的所有数据报的成员资格,或者可能是源特定的,这意味着它表示仅接收来自特定源地址的数据报的成员资格。成员密钥是否为源特定可以通过调用其sourceAddress
方法来确定。
成员密钥在创建时有效,并保持有效,直到通过调用drop
方法删除成员资格,或者通道关闭。可以通过调用其isValid
方法来测试成员密钥的有效性。
如果成员密钥不是源特定的,并且底层操作系统支持源过滤,则可以使用block
和unblock
方法来阻止或解除阻止特定源地址的多播数据报。
- 自版本:
- 1.7
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract MembershipKey
block
(InetAddress source) 阻止来自给定源地址的多播数据报。abstract MulticastChannel
channel()
返回创建此成员密钥的通道。abstract void
drop()
删除成员资格。abstract InetAddress
group()
返回创建此成员密钥的多播组。abstract boolean
isValid()
告知此成员资格是否有效。abstract NetworkInterface
返回创建此成员密钥的网络接口。abstract InetAddress
如果此成员密钥是源特定的,则返回源地址;如果此成员不是源特定的,则返回null
。abstract MembershipKey
unblock
(InetAddress source) 解除先前使用block
方法阻止的给定源地址的多播数据报。
-
Constructor Details
-
MembershipKey
protected MembershipKey()初始化此类的新实例。
-
-
Method Details
-
isValid
public abstract boolean isValid()告知此成员资格是否有效。多播组成员资格在创建时有效,并保持有效,直到通过调用
drop
方法删除成员资格,或者通道关闭。- 返回:
-
如果此成员密钥有效,则返回
true
;否则返回false
-
drop
public abstract void drop() -
block
阻止来自给定源地址的多播数据报。如果此成员密钥不是源特定的,并且底层操作系统支持源过滤,则此方法将阻止来自给定源地址的多播数据报。如果给定源地址已被阻止,则此方法不会产生任何效果。在阻止源地址后,仍可能接收来自该源的数据报。当数据报在套接字的接收缓冲区中等待接收时,可能会出现这种情况。
- 参数:
-
source
- 要阻止的源地址 - 返回:
- 此成员密钥
- 抛出:
-
IllegalArgumentException
- 如果source
参数不是单播地址或与多播组的地址类型不同 -
IllegalStateException
- 如果此成员密钥是源特定的或不再有效 -
UnsupportedOperationException
- 如果底层操作系统不支持源过滤 -
IOException
- 如果发生I/O错误
-
unblock
解除先前使用block
方法阻止的给定源地址的多播数据报。- 参数:
-
source
- 要解除阻止的源地址 - 返回:
- 此成员密钥
- 抛出:
-
IllegalStateException
- 如果给定源地址当前未被阻止或成员密钥不再有效
-
channel
返回创建此成员密钥的通道。即使成员变为无效
,此方法仍将继续返回通道。- 返回:
- 通道
-
group
返回创建此成员密钥的多播组。即使成员变为无效
,此方法仍将继续返回组。- 返回:
- 多播组
-
networkInterface
返回创建此成员密钥的网络接口。即使成员变为无效
,此方法仍将继续返回网络接口。- 返回:
- 网络接口
-
sourceAddress
如果此成员密钥是源特定的,则返回源地址;如果此成员不是源特定的,则返回null
。- 返回:
-
如果此成员密钥是源特定的,则返回源地址;否则返回
null
-