Module java.base

Class MembershipKey

java.lang.Object
java.nio.channels.MembershipKey

public abstract class MembershipKey extends Object
表示互联网协议(IP)多播组成员资格的令牌。

成员密钥可以表示接收发送到组的所有数据报的成员资格,或者可能是源特定的,这意味着它表示仅接收来自特定源地址的数据报的成员资格。成员密钥是否为源特定可以通过调用其sourceAddress方法来确定。

成员密钥在创建时有效,并保持有效,直到通过调用drop方法删除成员资格,或者通道关闭。可以通过调用其isValid方法来测试成员密钥的有效性。

如果成员密钥不是源特定的,并且底层操作系统支持源过滤,则可以使用blockunblock方法来阻止或解除阻止特定源地址的多播数据报。

自版本:
1.7
参见:
  • Constructor Details

    • MembershipKey

      protected MembershipKey()
      初始化此类的新实例。
  • Method Details

    • isValid

      public abstract boolean isValid()
      告知此成员资格是否有效。

      多播组成员资格在创建时有效,并保持有效,直到通过调用drop方法删除成员资格,或者通道关闭。

      返回:
      如果此成员密钥有效,则返回true;否则返回false
    • drop

      public abstract void drop()
      删除成员资格。

      如果成员密钥表示接收所有数据报的成员资格,则删除成员资格,通道将不再接收发送到组的任何数据报。如果成员密钥是源特定的,则通道将不再接收来自该源地址发送到组的数据报。

      删除成员资格后,仍可能接收发送到组的数据报。当数据报在套接字的接收缓冲区中等待接收时,可能会出现这种情况。删除成员资格后,通道可以再次join组,此时将返回新的成员密钥。

      返回时,此成员对象将变为无效。如果多播组成员资格已经无效,则调用此方法不会产生任何效果。一旦多播组成员资格无效,它将永远保持无效。

    • block

      public abstract MembershipKey block(InetAddress source) throws IOException
      阻止来自给定源地址的多播数据报。

      如果此成员密钥不是源特定的,并且底层操作系统支持源过滤,则此方法将阻止来自给定源地址的多播数据报。如果给定源地址已被阻止,则此方法不会产生任何效果。在阻止源地址后,仍可能接收来自该源的数据报。当数据报在套接字的接收缓冲区中等待接收时,可能会出现这种情况。

      参数:
      source - 要阻止的源地址
      返回:
      此成员密钥
      抛出:
      IllegalArgumentException - 如果source参数不是单播地址或与多播组的地址类型不同
      IllegalStateException - 如果此成员密钥是源特定的或不再有效
      UnsupportedOperationException - 如果底层操作系统不支持源过滤
      IOException - 如果发生I/O错误
    • unblock

      public abstract MembershipKey unblock(InetAddress source)
      解除先前使用block方法阻止的给定源地址的多播数据报。
      参数:
      source - 要解除阻止的源地址
      返回:
      此成员密钥
      抛出:
      IllegalStateException - 如果给定源地址当前未被阻止或成员密钥不再有效
    • channel

      public abstract MulticastChannel channel()
      返回创建此成员密钥的通道。即使成员变为无效,此方法仍将继续返回通道。
      返回:
      通道
    • group

      public abstract InetAddress group()
      返回创建此成员密钥的多播组。即使成员变为无效,此方法仍将继续返回组。
      返回:
      多播组
    • networkInterface

      public abstract NetworkInterface networkInterface()
      返回创建此成员密钥的网络接口。即使成员变为无效,此方法仍将继续返回网络接口。
      返回:
      网络接口
    • sourceAddress

      public abstract InetAddress sourceAddress()
      如果此成员密钥是源特定的,则返回源地址;如果此成员不是源特定的,则返回null
      返回:
      如果此成员密钥是源特定的,则返回源地址;否则返回null