- java.lang.Object
-
- java.nio.channels.AsynchronousServerSocketChannel
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
,AsynchronousChannel
,Channel
,NetworkChannel
public abstract class AsynchronousServerSocketChannel extends Object implements AsynchronousChannel, NetworkChannel
用于面向流的侦听套接字的异步通道。通过调用此类的
open
方法创建异步服务器套接字通道。 新创建的异步服务器套接字通道已打开但尚未绑定。 它可以绑定到本地地址,并配置为通过调用bind
方法监听连接。 一旦绑定,则使用accept
方法启动接受通道插座的连接。 在未绑定通道上调用accept
方法的尝试将导致抛出NotYetBoundException
。这种类型的通道可以安全地被多个并发线程使用,尽管在任何时候最多只能接受一个操作。 如果线程在先前接受操作完成之前启动接受操作,那么将抛出一个
AcceptPendingException
。套接字选项使用
setOption
方法进行配置。 此类型的频道支持以下选项:Option Name 描述 SO_RCVBUF
The size of the socket receive buffer SO_REUSEADDR
Re-use address 用法示例:
final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(5000)); listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() { public void completed(AsynchronousSocketChannel ch, Void att) { // accept the next connection listener.accept(null, this); // handle this connection handle(ch); } public void failed(Throwable exc, Void att) { ... } });
- 从以下版本开始:
- 1.7
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
初始化此类的新实例。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract Future<AsynchronousSocketChannel>
accept()
接受连接。abstract <A> void
accept(A attachment, CompletionHandler<AsynchronousSocketChannel,? super A> handler)
接受连接。AsynchronousServerSocketChannel
bind(SocketAddress local)
将通道的套接字绑定到本地地址,并配置套接字以监听连接。abstract AsynchronousServerSocketChannel
bind(SocketAddress local, int backlog)
将通道的套接字绑定到本地地址,并配置套接字以监听连接。abstract SocketAddress
getLocalAddress()
返回此通道的套接字所绑定的套接字地址。static AsynchronousServerSocketChannel
open()
打开异步服务器套接字通道。static AsynchronousServerSocketChannel
open(AsynchronousChannelGroup group)
打开异步服务器套接字通道。AsynchronousChannelProvider
provider()
返回创建此通道的提供程序。abstract <T> AsynchronousServerSocketChannel
setOption(SocketOption<T> name, T value)
设置套接字选项的值。-
Methods inherited from interface java.nio.channels.AsynchronousChannel
close
-
Methods inherited from interface java.nio.channels.NetworkChannel
getOption, supportedOptions
-
-
-
-
构造方法详细信息
-
AsynchronousServerSocketChannel
protected AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
初始化此类的新实例。- 参数
-
provider
- 创建此频道的提供商
-
-
方法详细信息
-
provider
public final AsynchronousChannelProvider provider()
返回创建此通道的提供程序。- 结果
- 创建此频道的提供商
-
open
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group) throws IOException
打开异步服务器套接字通道。通过在创建给定组的
AsynchronousChannelProvider
对象上调用openAsynchronousServerSocketChannel
方法创建新通道。 如果组参数为null
则生成的通道由系统级默认提供程序创建,并绑定到默认组 。- 参数
-
group
- 新建通道应绑定的组,或默认组的null
- 结果
- 一个新的异步服务器插槽通道
- 异常
-
ShutdownChannelGroupException
- 如果通道组关闭 -
IOException
- 如果发生I / O错误
-
open
public static AsynchronousServerSocketChannel open() throws IOException
打开异步服务器套接字通道。此方法返回绑定到默认组的异步服务器套接字通道。 此方法等效于评估表达式:
open((AsynchronousChannelGroup)null);
- 结果
- 一个新的异步服务器插槽通道
- 异常
-
IOException
- 如果发生I / O错误
-
bind
public final AsynchronousServerSocketChannel bind(SocketAddress local) throws IOException
将通道的套接字绑定到本地地址,并配置套接字以监听连接。此方法的调用等同于以下内容:
bind(local, 0);
- Specified by:
-
bind
在接口NetworkChannel
- 参数
-
local
- 绑定套接字的本地地址,或null
绑定到自动分配的套接字地址 - 结果
- 这个频道
- 异常
-
AlreadyBoundException
- 如果套接字已经绑定 -
UnsupportedAddressTypeException
- 如果不支持给定地址的类型 -
SecurityException
- 如果安装了一个安全管理器,并且它拒绝了未指定的权限。 此接口的实现应指定任何所需的权限。 -
ClosedChannelException
- 如果通道关闭 -
IOException
- 如果发生其他I / O错误 - 另请参见:
-
NetworkChannel.getLocalAddress()
-
bind
public abstract AsynchronousServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
将通道的套接字绑定到本地地址,并配置套接字以监听连接。该方法用于在套接字和本地地址之间建立关联。 一旦建立了关联,则套接字保持绑定,直到关联的信道被关闭。
backlog
参数是套接字上挂起的连接的最大数量。 其确切语义是实现具体的。 特别地,实现可以施加最大长度,或者可以选择忽略参数altogther。 如果backlog
参数的值为0
或负值,则使用实现特定的默认值。- 参数
-
local
- 绑定套接字的本地地址,或null
绑定到自动分配的套接字地址 -
backlog
- 挂起连接的最大数量 - 结果
- 这个频道
- 异常
-
AlreadyBoundException
- 如果套接字已经绑定 -
UnsupportedAddressTypeException
- 如果不支持给定地址的类型 -
SecurityException
- 如果已安装安全管理员,并且其checkListen
方法拒绝操作 -
ClosedChannelException
- 如果通道关闭 -
IOException
- 如果发生其他I / O错误
-
setOption
public abstract <T> AsynchronousServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException
描述从接口NetworkChannel
复制设置套接字选项的值。- Specified by:
-
setOption
在接口NetworkChannel
- 参数类型
-
T
- 套接字选项值的类型 - 参数
-
name
- 套接字选项 -
value
- 套接字选项的值。 值为null
可能是某些套接字选项的有效值。 - 结果
- 这个频道
- 异常
-
IllegalArgumentException
- 如果该值不是此套接字选项的有效值 -
ClosedChannelException
- 如果此频道关闭 -
IOException
- 如果发生I / O错误 - 另请参见:
-
StandardSocketOptions
-
accept
public abstract <A> void accept(A attachment, CompletionHandler<AsynchronousSocketChannel,? super A> handler)
接受连接。此方法启动异步操作以接受对该通道的套接字进行的连接。
handler
参数是一个完成处理程序,在连接被接受时被调用(或者操作失败)。 传递给完成处理程序的结果是新连接的AsynchronousSocketChannel
。当接受新的连接时,所产生的
AsynchronousSocketChannel
将被绑定到与该频道相同的AsynchronousChannelGroup
。 如果该基团是shutdown
和连接被接受,则所述连接被关闭,并且操作与完成IOException
并引起ShutdownChannelGroupException
。为了允许新连接的并发处理,当立即接受新连接时,完成处理程序不会被启动线程直接调用(请参阅Threading )。
如果安装了一个安全管理器,那么它将通过安全管理器的
checkAccept
方法验证连接的远程端点的地址和端口号是否被允许。 权限检查由受此方法的调用上下文限制的权限执行。 如果权限检查失败,则连接被关闭,并且操作完成与一个SecurityException
。- 参数类型
-
A
- 附件的类型 - 参数
-
attachment
- 要附加到I / O操作的对象; 可以是null
-
handler
- 消耗结果的处理程序 - 异常
-
AcceptPendingException
- 如果此通道上已经接受了接受操作 -
NotYetBoundException
- 如果此通道的套接字尚未绑定 -
ShutdownChannelGroupException
- 如果通道组已终止
-
accept
public abstract Future<AsynchronousSocketChannel> accept()
接受连接。此方法启动异步操作以接受对该通道的套接字进行的连接。 该方法的行为方式与
accept(Object, CompletionHandler)
方法完全相同,不同之处在于,该方法不是指定完成处理程序,而是返回表示待处理结果的Future
。Future
的get
方法在成功完成后返回新连接的AsynchronousSocketChannel
。- 结果
-
表示待处理结果的
Future
对象 - 异常
-
AcceptPendingException
- 如果此通道上已经有接受操作 -
NotYetBoundException
- 如果此通道的套接字尚未绑定
-
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
返回此通道的套接字所绑定的套接字地址。通道为Internet协议套接字地址的
bound
,则此方法的返回值为InetSocketAddress
。如果有一个安全管理器集,它的
checkConnect
方法被调用本地地址和-1
作为参数来查看是否允许该操作。 如果不允许操作,则SocketAddress
表示loopback
地址的SocketAddress和通道插座的本地端口。- Specified by:
-
getLocalAddress
接口NetworkChannel
- 结果
-
该
SocketAddress
的套接字绑定到,或SocketAddress
代表的环回地址,如果安全管理器拒绝,或者null
如果通道的套接字不绑定 - 异常
-
ClosedChannelException
- 如果通道关闭 -
IOException
- 如果发生I / O错误
-
-