- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- java.nio.channels.ServerSocketChannel
-
- 实现的所有接口
-
Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
,NetworkChannel
public abstract class ServerSocketChannelextends AbstractSelectableChannelimplements NetworkChannel
面向流的侦听套接字的可选通道。通过调用此类的
open
方法创建服务器套接字通道。 无法为任意预先存在的ServerSocket
创建通道。 新创建的服务器套接字通道已打开但尚未绑定。 尝试调用未绑定的服务器套接字通道的accept
方法将导致抛出NotYetBoundException
。 可以通过调用此类定义的bind
方法之一来绑定服务器套接字通道。使用
setOption
方法配置套接字选项。 服务器套接字通道支持以下选项:Option Name 描述 SO_RCVBUF
The size of the socket receive buffer SO_REUSEADDR
Re-use address 服务器套接字通道可安全地由多个并发线程使用。
- 从以下版本开始:
- 1.4
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
ServerSocketChannel(SelectorProvider provider)
初始化此类的新实例。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 abstract SocketChannel
accept()
接受与此通道套接字的连接。ServerSocketChannel
bind(SocketAddress local)
将通道的套接字绑定到本地地址并配置套接字以侦听连接。abstract ServerSocketChannel
bind(SocketAddress local, int backlog)
将通道的套接字绑定到本地地址并配置套接字以侦听连接。abstract SocketAddress
getLocalAddress()
返回此通道的套接字绑定的套接字地址。static ServerSocketChannel
open()
打开服务器套接字通道。abstract <T> ServerSocketChannel
setOption(SocketOption<T> name, T value)
设置套接字选项的值。abstract ServerSocket
socket()
检索与此通道关联的服务器套接字。int
validOps()
返回标识此通道支持的操作的操作集。-
声明方法的类 java.nio.channels.spi.AbstractSelectableChannel
configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register
-
声明方法的类 java.nio.channels.SelectableChannel
blockingLock, isBlocking, isRegistered, keyFor, register
-
声明方法的类 java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end
-
声明方法的类 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
声明方法的接口 java.nio.channels.NetworkChannel
getOption, supportedOptions
-
-
-
-
构造方法详细信息
-
ServerSocketChannel
protected ServerSocketChannel(SelectorProvider provider)
初始化此类的新实例。- 参数
-
provider
- 创建此频道的提供商
-
-
方法详细信息
-
open
public static ServerSocketChannel open() throws IOException
打开服务器套接字通道。通过调用系统范围的默认
SelectorProvider
对象的openServerSocketChannel
方法来创建新通道。新频道的套接字最初是未绑定的; 它必须通过其套接字
bind
方法之一绑定到特定地址才能接受连接。- 结果
- 一个新的套接字通道
- 异常
-
IOException
- 如果发生I / O错误
-
validOps
public final int validOps()
返回标识此通道支持的操作的操作集。服务器套接字通道仅支持接受新连接,因此此方法返回
SelectionKey.OP_ACCEPT
。- Specified by:
-
validOps
在类SelectableChannel
- 结果
- 有效操作集
-
bind
public final ServerSocketChannel bind(SocketAddress local) throws IOException
将通道的套接字绑定到本地地址并配置套接字以侦听连接。调用此方法等效于以下内容:
bind(local, 0);
- Specified by:
-
bind
在界面NetworkChannel
- 参数
-
local
- 绑定套接字的本地地址,或null
绑定到自动分配的套接字地址 - 结果
- 这个频道
- 异常
-
AlreadyBoundException
- 如果套接字已绑定 -
UnsupportedAddressTypeException
- 如果不支持给定地址的类型 -
ClosedChannelException
- 如果频道已关闭 -
IOException
- 如果发生其他一些I / O错误 -
SecurityException
- 如果已安装安全管理器且其checkListen
方法拒绝操作 - 从以下版本开始:
- 1.7
- 另请参见:
-
NetworkChannel.getLocalAddress()
-
bind
public abstract ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
将通道的套接字绑定到本地地址并配置套接字以侦听连接。此方法用于在套接字和本地地址之间建立关联。 一旦建立关联,则套接字保持绑定直到通道关闭。
backlog
参数是套接字上的最大挂起连接数。 它的确切语义是特定于实现的。 特别地,实现可以施加最大长度或者可以选择忽略参数altogther。 如果backlog
参数的值为0
或负值,则使用特定于实现的默认值。- 参数
-
local
- 绑定套接字的地址,或null
绑定到自动分配的套接字地址 -
backlog
- 最大挂起连接数 - 结果
- 这个频道
- 异常
-
AlreadyBoundException
- 如果套接字已绑定 -
UnsupportedAddressTypeException
- 如果不支持给定地址的类型 -
ClosedChannelException
- 如果此频道已关闭 -
IOException
- 如果发生其他一些I / O错误 -
SecurityException
- 如果已安装安全管理器且其checkListen
方法拒绝操作 - 从以下版本开始:
- 1.7
-
setOption
public abstract <T> ServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException
从界面复制的说明:NetworkChannel
设置套接字选项的值。- Specified by:
-
setOption
在界面NetworkChannel
- 参数类型
-
T
- 套接字选项值的类型 - 参数
-
name
- 套接字选项 -
value
- 套接字选项的值。 值null
可能是某些套接字选项的有效值。 - 结果
- 这个频道
- 异常
-
UnsupportedOperationException
- 如果此通道不支持套接字选项 -
IllegalArgumentException
- 如果该值不是此套接字选项的有效值 -
ClosedChannelException
- 如果此频道已关闭 -
IOException
- 如果发生I / O错误 - 从以下版本开始:
- 1.7
- 另请参见:
-
StandardSocketOptions
-
socket
public abstract ServerSocket socket()
检索与此通道关联的服务器套接字。返回的对象不会声明未在
ServerSocket
类中声明的任何公共方法。- 结果
- 与此通道关联的服务器套接字
-
accept
public abstract SocketChannel accept() throws IOException
接受与此通道套接字的连接。如果此通道处于非阻塞模式,则如果没有挂起连接,则此方法将立即返回
null
。 否则它将无限期地阻塞,直到新连接可用或发生I / O错误。无论此通道的阻塞模式如何,此方法返回的套接字通道(如果有)都将处于阻塞模式。
此方法执行与
ServerSocket
类的accept
方法完全相同的安全检查。 也就是说,如果已安装安全管理器,则对于每个新连接,此方法将验证安全管理器checkAccept
方法是否允许连接的远程端点的地址和端口号。- 结果
- 新连接的套接字通道,如果此通道处于非阻塞模式且没有可接受的连接,
null
- 异常
-
ClosedChannelException
- 如果此频道已关闭 -
AsynchronousCloseException
- 如果另一个线程在接受操作正在进行时关闭此通道 -
ClosedByInterruptException
- 如果另一个线程在接受操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态 -
NotYetBoundException
- 如果此通道的套接字尚未绑定 -
SecurityException
- 如果已安装安全管理器且不允许访问新连接的远程端点 -
IOException
- 如果发生其他一些I / O错误
-
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
返回此通道的套接字绑定的套接字地址。如果通道是
bound
到Internet协议套接字地址,则此方法的返回值是InetSocketAddress
类型。如果存在安全管理器集,则使用本地地址和
-1
作为其参数调用其checkConnect
方法,以查看是否允许该操作。 如果不允许该操作,则SocketAddress
表示loopback
地址的SocketAddress和通道套接字的本地端口。- Specified by:
-
getLocalAddress
在界面NetworkChannel
- 结果
- 该
SocketAddress
这套接字绑定到,或SocketAddress
代表的环回地址,如果安全管理器拒绝,或null
如果通道的套接字不绑定 - 异常
-
ClosedChannelException
- 如果频道已关闭 -
IOException
- 如果发生I / O错误
-
-