Module jdk.sctp
Package com.sun.nio.sctp

Class SctpServerChannel

所有已实现的接口:
Closeable, AutoCloseable, Channel, InterruptibleChannel

public abstract class SctpServerChannel extends AbstractSelectableChannel
用于消息导向监听SCTP套接字的可选择通道。

SCTPServerChannel通过调用此类的open方法来创建。新创建的SCTP服务器通道是打开的,但尚未绑定。尝试在未绑定通道上调用accept方法将导致抛出NotYetBoundException。可以通过调用此类定义的一个bind方法之一来绑定SCTP服务器通道。

使用setOption方法配置套接字选项。SCTP服务器套接字通道支持以下选项:

套接字选项
选项名称 描述
SCTP_INIT_MAXSTREAMS 本地端点在关联初始化期间请求的最大流数
还可能支持其他(特定于实现的)选项。通过调用supportedOptions方法获取支持的选项列表。

SCTP服务器通道可安全地供多个并发线程使用。

自1.7版本起:
1.7
  • Constructor Details

    • SctpServerChannel

      protected SctpServerChannel(SelectorProvider provider)
      初始化此类的新实例。
      参数:
      provider - 此通道的选择器提供程序
  • Method Details

    • open

      public static SctpServerChannel open() throws IOException
      打开一个SCTP服务器通道。

      新通道的套接字最初未绑定;必须通过其套接字的一个bind方法之一将其绑定到特定地址,然后才能接受关联。

      返回:
      一个新的SCTP服务器通道
      抛出:
      UnsupportedOperationException - 如果不支持SCTP协议
      IOException - 如果发生I/O错误
    • accept

      public abstract SctpChannel accept() throws IOException
      在此通道的套接字上接受一个关联。

      如果此通道处于非阻塞模式,则如果没有待处理的关联,此方法将立即返回null。否则,它将无限期地阻塞,直到有新的关联可用或发生I/O错误。

      此方法返回的SCTPChannel(如果有)将处于阻塞模式,无论此通道的阻塞模式如何。

      如果安装了安全管理器,则对于每个新关联,此方法将验证关联的远程对等方的地址和端口号是否被安全管理器的checkAccept方法允许。

      返回:
      新关联的SCTP通道,如果此通道处于非阻塞模式且没有可接受的关联,则返回null
      抛出:
      ClosedChannelException - 如果此通道已关闭
      AsynchronousCloseException - 如果另一个线程在接受操作进行中关闭此通道
      ClosedByInterruptException - 如果另一个线程在接受操作进行中中断当前线程,从而关闭通道并设置当前线程的中断状态
      NotYetBoundException - 如果此通道的套接字尚未绑定
      SecurityException - 如果安装了安全管理器且不允许访问新关联的远程对等方
      IOException - 如果发生其他I/O错误
    • bind

      public final SctpServerChannel bind(SocketAddress local) throws IOException
      将通道的套接字绑定到本地地址并配置套接字以侦听关联。

      此方法的工作方式就好像调用它等效于评估表达式:

       bind(local, 0);
       
      参数:
      local - 要绑定套接字的本地地址,或null以将套接字绑定到自动分配的套接字地址
      返回:
      此通道
      抛出:
      ClosedChannelException - 如果此通道已关闭
      AlreadyBoundException - 如果此通道已绑定
      UnsupportedAddressTypeException - 如果给定地址的类型不受支持
      SecurityException - 如果安装了安全管理器并且其checkListen方法拒绝操作
      IOException - 如果发生其他I/O错误
    • bind

      public abstract SctpServerChannel bind(SocketAddress local, int backlog) throws IOException
      将通道的套接字绑定到本地地址并配置套接字以侦听关联。

      此方法用于在套接字和本地地址之间建立关系。建立关系后,套接字将保持绑定状态,直到通道关闭。此关系可能不一定是与地址local相关的,因为它可能会被unbindAddress移除,但是一旦此方法的调用成功完成,通道的套接字将始终至少绑定到一个本地地址。

      一旦通道的套接字成功绑定到特定地址(而不是自动分配的地址),则可以使用bindAddress绑定更多地址,或使用unbindAddress删除地址。

      backlog参数是套接字上挂起关联的最大数量。其确切语义是特定于实现的。实现可能会施加特定于实现的最大长度,或者选择忽略该参数。如果backlog参数的值为0或负值,则使用特定于实现的默认值。

      参数:
      local - 要绑定套接字的本地地址,或null以将套接字绑定到自动分配的套接字地址
      backlog - 挂起关联的最大数量
      返回:
      此通道
      抛出:
      ClosedChannelException - 如果此通道已关闭
      AlreadyBoundException - 如果此通道已绑定
      UnsupportedAddressTypeException - 如果给定地址的类型不受支持
      SecurityException - 如果安装了安全管理器并且其checkListen方法拒绝操作
      IOException - 如果发生其他I/O错误
    • bindAddress

      public abstract SctpServerChannel bindAddress(InetAddress address) throws IOException
      将给定地址添加到通道套接字的绑定地址中。

      给定地址不能是通配符地址。在调用此方法之前,必须首先使用bind绑定通道,否则将抛出NotYetBoundException异常。 bind方法以SocketAddress作为其参数,通常包含端口号和地址。使用此方法后续绑定的地址仅仅是地址,因为通道的SCTP端口号在通道的生命周期内保持不变。

      成功完成此方法后接受的新关联将与给定地址关联。

      参数:
      address - 要添加到套接字绑定地址的地址
      返回:
      此通道
      抛出:
      ClosedChannelException - 如果此通道已关闭
      NotYetBoundException - 如果此通道尚未绑定
      AlreadyBoundException - 如果此通道已绑定到给定地址
      IllegalArgumentException - 如果地址为null或为通配符地址
      IOException - 如果发生其他I/O错误
    • unbindAddress

      public abstract SctpServerChannel unbindAddress(InetAddress address) throws IOException
      从通道套接字的绑定地址中删除给定地址。

      给定地址不能是通配符地址。在调用此方法之前,必须首先使用bind绑定通道,否则将抛出NotYetBoundException异常。如果在没有address作为其绑定地址之一的通道上调用此方法,或者只有一个本地地址绑定到通道上,则此方法将抛出IllegalUnbindException。使用bind绑定通道套接字的初始地址可能会从通道套接字的绑定地址中删除。

      成功完成此方法后接受的新关联将不会与给定地址关联。

      参数:
      address - 要从套接字绑定地址中删除的地址
      返回:
      此通道
      抛出:
      ClosedChannelException - 如果此通道已关闭
      NotYetBoundException - 如果此通道尚未绑定
      IllegalArgumentException - 如果地址为null或为通配符地址
      IllegalUnbindException - 如果实现不支持从监听套接字中删除地址,address未绑定到通道套接字,或通道只绑定了一个地址
      IOException - 如果发生其他I/O错误
    • getAllLocalAddresses

      public abstract Set<SocketAddress> getAllLocalAddresses() throws IOException
      返回此通道套接字绑定的所有套接字地址。
      返回:
      此通道套接字绑定的所有套接字地址,如果通道套接字未绑定,则返回空的Set
      抛出:
      ClosedChannelException - 如果通道已关闭
      IOException - 如果发生I/O错误
    • getOption

      public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException
      返回套接字选项的值。
      类型参数:
      T - 套接字选项值的类型
      参数:
      name - 套接字选项
      返回:
      套接字选项的值。对于某些套接字选项,null可能是有效值。
      抛出:
      UnsupportedOperationException - 如果此通道不支持该套接字选项
      ClosedChannelException - 如果此通道已关闭
      IOException - 如果发生I/O错误
      参见:
    • setOption

      public abstract <T> SctpServerChannel setOption(SctpSocketOption<T> name, T value) throws IOException
      设置套接字选项的值。
      类型参数:
      T - 套接字选项值的类型
      参数:
      name - 套接字选项
      value - 套接字选项的值。对于某些套接字选项,null可能是有效值。
      返回:
      此通道
      抛出:
      UnsupportedOperationException - 如果此通道不支持该套接字选项
      IllegalArgumentException - 如果值对于此套接字选项无效
      ClosedChannelException - 如果此通道已关闭
      IOException - 如果发生I/O错误
      参见:
    • supportedOptions

      public abstract Set<SctpSocketOption<?>> supportedOptions()
      返回此通道支持的套接字选项的集合。

      即使通道已关闭,此方法仍将返回选项集。

      返回:
      此通道支持的套接字选项的集合
    • validOps

      public final int validOps()
      返回标识此通道支持的操作的操作集。

      SCTP服务器通道仅支持接受新关联,因此此方法返回SelectionKey.OP_ACCEPT

      指定者:
      validOps 在类 SelectableChannel
      返回:
      有效操作集