- 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_RCVBUFThe size of the socket receive buffer SO_REUSEADDRRe-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 描述 protectedAsynchronousServerSocketChannel(AsynchronousChannelProvider provider)初始化此类的新实例。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract Future<AsynchronousSocketChannel>accept()接受连接。abstract <A> voidaccept(A attachment, CompletionHandler<AsynchronousSocketChannel,? super A> handler)接受连接。AsynchronousServerSocketChannelbind(SocketAddress local)将通道的套接字绑定到本地地址,并配置套接字以监听连接。abstract AsynchronousServerSocketChannelbind(SocketAddress local, int backlog)将通道的套接字绑定到本地地址,并配置套接字以监听连接。abstract SocketAddressgetLocalAddress()返回此通道的套接字所绑定的套接字地址。static AsynchronousServerSocketChannelopen()打开异步服务器套接字通道。static AsynchronousServerSocketChannelopen(AsynchronousChannelGroup group)打开异步服务器套接字通道。AsynchronousChannelProviderprovider()返回创建此通道的提供程序。abstract <T> AsynchronousServerSocketChannelsetOption(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错误
-
-