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