- 所有已实现的接口:
Closeable,AutoCloseable,Channel,InterruptibleChannel,NetworkChannel
服务套接字通道是通过调用此类的 open 方法之一创建的。 no-arg open 方法打开一个服务套接字通道互联网协议插座。 open(ProtocolFamily) 方法用于为指定协议族的套接字打开服务套接字通道。不可能为任意的、预先存在的套接字创建通道。新创建的服务套接字通道已打开但尚未绑定。尝试调用未绑定服务套接字通道的 accept 方法将导致抛出 NotYetBoundException 。可以通过调用此类定义的 bind 方法之一来绑定服务套接字通道。
使用 setOption 方法配置套接字选项。服务套接字通道互联网协议套接字支持以下选项:
选项名称 Description SO_RCVBUF套接字接收缓冲区的大小 SO_REUSEADDR重复使用地址
服务套接字通道Unix域套接字支持:
选项名称 Description SO_RCVBUF套接字接收缓冲区的大小
还可以支持其他(特定于实现的)选项。
服务套接字通道可以安全地供多个并发线程使用。
- 自从:
- 1.4
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract SocketChannelaccept()接受与此通道的套接字建立的连接。final ServerSocketChannelbind(SocketAddress local) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract ServerSocketChannelbind(SocketAddress local, int backlog) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract SocketAddress返回此通道的套接字绑定到的套接字地址。static ServerSocketChannelopen()打开服务套接字通道互联网协议socket。static ServerSocketChannelopen(ProtocolFamily family) 打开服务套接字通道。abstract <T> ServerSocketChannelsetOption(SocketOption<T> name, T value) 设置套接字选项的值。abstract ServerSocketsocket()检索与此通道关联的服务套接字。final intvalidOps()返回标识此通道支持的操作的操作集。在类 java.nio.channels.spi.AbstractSelectableChannel 中声明的方法
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register在类 java.nio.channels.SelectableChannel 中声明的方法
register在类 java.nio.channels.spi.AbstractInterruptibleChannel 中声明的方法
begin, close, end, isOpen在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait在接口 java.nio.channels.NetworkChannel 中声明的方法
getOption, supportedOptions
-
构造方法详细信息
-
ServerSocketChannel
初始化此类的新实例。- 参数:
provider- 创建此通道的提供商
-
-
方法详情
-
open
打开服务套接字通道互联网协议socket。新通道是通过调用系统范围默认
SelectorProvider对象的openServerSocketChannel方法创建的。新通道的套接字最初是未绑定的;在接受连接之前,它必须通过其套接字的
bind方法之一绑定到特定地址。- 返回:
- 一个新的套接字通道
- 抛出:
IOException- 如果发生 I/O 错误- 参见:
-
open
打开服务套接字通道。family参数指定通道套接字的protocol family。新通道是通过调用系统范围默认
SelectorProvider对象的openServerSocketChannel(ProtocolFamily)方法创建的。- 参数:
family- 协议族- 返回:
- 一个新的套接字通道
- 抛出:
UnsupportedOperationException- 如果不支持指定的协议系列。例如,假设参数指定为StandardProtocolFamily.INET6但平台上未启用 IPv6。IOException- 如果发生 I/O 错误- 自从:
- 15
- 参见:
-
validOps
public final int validOps()返回标识此通道支持的操作的操作集。服务套接字通道仅支持接受新连接,因此此方法返回
SelectionKey.OP_ACCEPT。- 指定者:
validOps在类SelectableChannel中- 返回:
- 有效操作集
-
bind
将通道的套接字绑定到本地地址并配置套接字以监听连接。调用此方法等效于以下内容:
bind(local, 0);
- 指定者:
bind在接口NetworkChannel中- 参数:
local- 绑定套接字的本地地址,或null绑定到自动分配的套接字地址- 返回:
- 这个通道
- 抛出:
AlreadyBoundException- 如果套接字已经绑定UnsupportedAddressTypeException- 如果不支持给定地址的类型ClosedChannelException- 如果通道关闭IOException- 如果发生其他 I/O 错误SecurityException- 如果安装了安全管理器并且它拒绝操作- 自从:
- 1.7
- 参见:
-
bind
将通道的套接字绑定到本地地址并配置套接字以监听连接。此方法用于在套接字和本地地址之间建立关联。为了互联网协议套接字,一旦建立关联,套接字将保持绑定状态,直到通道关闭。
backlog参数是套接字上挂起连接的最大数量。它的确切语义是特定于实现的。特别是,一个实现可能会强加一个最大长度,或者可能会选择完全忽略该参数。如果backlog参数的值为0或负值,则使用特定于实现的默认值。- API 注意:
-
绑定服务套接字通道Unix域套接字,创建一个与
UnixDomainSocketAddress中的文件路径对应的文件。该文件在通道关闭后仍然存在,并且必须在另一个套接字可以绑定到相同名称之前将其删除。绑定到null地址会导致套接字自动地绑定到系统临时位置中的某个唯一文件。关联的套接字文件在通道关闭后也会保留。它的名称可以从通道的本地套接字地址获得。 - 实现注意事项:
- 每个平台都强制执行特定于实现的名称的最大长度Unix域socket。绑定通道时会强制执行此限制。最大长度通常接近且一般不少于 100 字节。此限制也适用于自动地绑定服务套接字通道。见Unix域网络属性 可用于选择创建这些套接字的临时目录。
- 参数:
local- 绑定套接字的地址,或null绑定到自动分配的套接字地址backlog- 最大挂起连接数- 返回:
- 这个通道
- 抛出:
AlreadyBoundException- 如果套接字已经绑定UnsupportedAddressTypeException- 如果不支持给定地址的类型ClosedChannelException- 如果此通道关闭IOException- 如果发生其他 I/O 错误SecurityException- 如果安装了安全管理器并且它的checkListen方法拒绝了一个操作互联网协议套接字地址,或一个Unix域套接字地址,如果它拒绝NetPermission("accessUnixDomainSocket")。- 自从:
- 1.7
-
setOption
public abstract <T> ServerSocketChannel setOption(SocketOption <T> name, T value) throws IOException 从接口NetworkChannel复制的描述设置套接字选项的值。- 指定者:
setOption在接口NetworkChannel中- 类型参数:
T- 套接字选项值的类型- 参数:
name- 套接字选项value- 套接字选项的值。null的值可能是某些套接字选项的有效值。- 返回:
- 这个通道
- 抛出:
UnsupportedOperationException- 如果此通道不支持套接字选项IllegalArgumentException- 如果该值不是此套接字选项的有效值ClosedChannelException- 如果此通道关闭IOException- 如果发生 I/O 错误- 自从:
- 1.7
- 参见:
-
socket
检索与此通道关联的服务套接字。返回的对象不会声明任何未在
ServerSocket类中声明的公共方法。- 返回:
- 与此通道关联的服务套接字
- 抛出:
UnsupportedOperationException- 如果通道的套接字不是互联网协议socket
-
accept
接受与此通道的套接字建立的连接。如果此通道处于非阻塞模式,那么如果没有挂起的连接,此方法将立即返回
null。否则它将无限期阻塞,直到有可用的新连接或发生 I/O 错误。此方法返回的套接字通道(如果有)将处于阻塞模式,而不管此通道的阻塞模式如何。
如果绑定到互联网协议套接字地址,此方法执行与
ServerSocket类的accept方法完全相同的安全检查。也就是说,如果安装了安全管理器,那么对于每个新连接,此方法都会验证安全管理器的checkAccept方法是否允许连接远程端点的地址和端口号。如果绑定到Unix域套接字地址,此方法检查NetPermission("accessUnixDomainSocket")。- 返回:
-
新连接的套接字通道,或者
null如果此通道处于非阻塞模式并且没有可用的连接被接受 - 抛出:
ClosedChannelException- 如果此通道关闭AsynchronousCloseException- 如果另一个线程在接受操作正在进行时关闭此通道ClosedByInterruptException- 如果另一个线程在accept操作进行时中断当前线程,从而关闭通道并设置当前线程的中断状态NotYetBoundException- 如果此通道的套接字尚未绑定SecurityException- 如果已安装安全管理器并且此通道绑定到InetSocketAddress并且安全管理器拒绝访问新连接的远程端点,或者如果此通道绑定到UnixDomainSocketAddress并且安全管理器拒绝NetPermission("accessUnixDomainSocket")IOException- 如果发生其他 I/O 错误
-
getLocalAddress
返回此通道的套接字绑定到的套接字地址。如果通道是
bound到 Internet 协议套接字地址,则此方法的返回值是InetSocketAddress类型。如果设置了安全管理器,则以本地地址和-1作为参数调用其checkConnect方法,以查看是否允许该操作。如果不允许该操作,则返回表示loopback地址和通道套接字的本地端口的SocketAddress。通道绑定到的地方Unix域套接字地址,套接字地址是一个
UnixDomainSocketAddress。如果设置了安全管理器,则使用NetPermission("accessUnixDomainSocket")调用其checkPermission方法。如果不允许该操作,则返回未命名的UnixDomainSocketAddress。- 指定者:
getLocalAddress在接口NetworkChannel中- 返回:
-
套接字绑定到的
SocketAddress,或者如果被安全管理器拒绝则代表环回地址或空路径的SocketAddress,或者如果通道的套接字未绑定则为null - 抛出:
ClosedChannelException- 如果通道关闭IOException- 如果发生 I/O 错误
-