- 所有已实现的接口:
Closeable,AutoCloseable,AsynchronousChannel,Channel,NetworkChannel
通过调用此类的 open 方法创建异步服务套接字通道。新创建的异步服务套接字通道已打开但尚未绑定。它可以绑定到本地地址并配置为通过调用 bind 方法来监听连接。绑定后,accept 方法用于启动接受到通道套接字的连接。尝试在未绑定的通道上调用 accept 方法将导致抛出 NotYetBoundException 。
这种类型的通道可以安全地供多个并发线程使用,尽管在任何时候最多只能执行一个接受操作。如果一个线程在前一个接受操作完成之前启动了一个接受操作,那么将抛出一个AcceptPendingException 。
使用 setOption 方法配置套接字选项。这种类型的通道支持以下选项:
还可以支持其他(特定于实现的)选项。
选项名称 Description SO_RCVBUF套接字接收缓冲区的大小 SO_REUSEADDR重复使用地址
使用示例:
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
-
构造方法总结
构造方法修饰符构造方法描述protected初始化此类的新实例。 -
方法总结
修饰符和类型方法描述abstract Future<AsynchronousSocketChannel>accept()接受连接。abstract <A> voidaccept(A attachment, CompletionHandler<AsynchronousSocketChannel, ? super A> handler) 接受连接。bind(SocketAddress local) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract AsynchronousServerSocketChannelbind(SocketAddress local, int backlog) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract SocketAddress返回此通道的套接字绑定到的套接字地址。open()打开异步服务套接字通道。open(AsynchronousChannelGroup group) 打开异步服务套接字通道。provider()返回创建此通道的提供者。abstract <T> AsynchronousServerSocketChannelsetOption(SocketOption<T> name, T value) 设置套接字选项的值。在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait在接口 java.nio.channels.AsynchronousChannel 中声明的方法
close在接口 java.nio.channels.NetworkChannel 中声明的方法
getOption, supportedOptions
-
构造方法详细信息
-
AsynchronousServerSocketChannel
初始化此类的新实例。- 参数:
provider- 创建此通道的提供商
-
-
方法详情
-
provider
返回创建此通道的提供者。- 返回:
- 创建此通道的提供商
-
open
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group) throws IOException 打开异步服务套接字通道。通过在创建给定组的
AsynchronousChannelProvider对象上调用openAsynchronousServerSocketChannel方法来创建新通道。如果组参数为null,则生成的通道由系统范围的默认提供程序创建,并绑定到 default group。- 参数:
group- 新建通道应绑定到的组,或null用于默认组- 返回:
- 一个新的异步服务套接字通道
- 抛出:
ShutdownChannelGroupException- 如果通道组关闭IOException- 如果发生 I/O 错误
-
open
打开异步服务套接字通道。此方法返回绑定到 default group 的异步服务套接字通道。此方法等效于计算表达式:
open((AsynchronousChannelGroup)null);
- 返回:
- 一个新的异步服务套接字通道
- 抛出:
IOException- 如果发生 I/O 错误
-
bind
将通道的套接字绑定到本地地址并配置套接字以监听连接。调用此方法等效于以下内容:
bind(local, 0);
- 指定者:
bind在接口NetworkChannel中- 参数:
local- 绑定套接字的本地地址,或null绑定到自动分配的套接字地址- 返回:
- 这个通道
- 抛出:
AlreadyBoundException- 如果套接字已经绑定UnsupportedAddressTypeException- 如果不支持给定地址的类型SecurityException- 如果安装了安全管理器并且它拒绝未指定的权限。此接口的实现应指定任何所需的权限。ClosedChannelException- 如果通道关闭IOException- 如果发生其他 I/O 错误- 参见:
-
bind
public abstract AsynchronousServerSocketChannel bind(SocketAddress local, int backlog) throws IOException 将通道的套接字绑定到本地地址并配置套接字以监听连接。此方法用于在套接字和本地地址之间建立关联。一旦建立关联,套接字将保持绑定状态,直到关联的通道关闭。
backlog参数是套接字上挂起连接的最大数量。它的确切语义是特定于实现的。特别是,一个实现可能会施加最大长度,或者可能会选择完全忽略该参数。如果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复制的描述设置套接字选项的值。- 指定者:
setOption在接口NetworkChannel中- 类型参数:
T- 套接字选项值的类型- 参数:
name- 套接字选项value- 套接字选项的值。null的值可能是某些套接字选项的有效值。- 返回:
- 这个通道
- 抛出:
IllegalArgumentException- 如果该值不是此套接字选项的有效值ClosedChannelException- 如果此通道关闭IOException- 如果发生 I/O 错误- 参见:
-
accept
public abstract <A> void accept(A attachment, CompletionHandler <AsynchronousSocketChannel , ? super A> handler) 接受连接。此方法启动异步操作以接受与此通道的套接字建立的连接。
handler参数是一个完成处理程序,在接受连接(或操作失败)时调用。传递给完成处理程序的结果是新连接的AsynchronousSocketChannel。当接受新连接时,生成的
AsynchronousSocketChannel将绑定到与此通道相同的AsynchronousChannelGroup。如果该组是shutdown并且接受了一个连接,则连接将关闭,操作将以IOException完成并导致ShutdownChannelGroupException。为了允许并发处理新连接,当立即接受新连接时,启动线程不会直接调用完成处理程序(请参阅 穿线 )。
如果安装了安全管理器,则它会验证连接远程端点的地址和端口号是否为安全管理器的
checkAccept方法所允许。权限检查是使用受此方法的调用上下文限制的权限执行的。如果权限检查失败,则连接关闭,操作以SecurityException完成。- 类型参数:
A- 附件类型- 参数:
attachment- 附加到 I/O 操作的对象;可以是nullhandler- 使用结果的处理程序- 抛出:
AcceptPendingException- 如果接受操作已经在这个通道上进行NotYetBoundException- 如果此通道的套接字尚未绑定ShutdownChannelGroupException- 如果通道组已终止
-
accept
接受连接。此方法启动异步操作以接受与此通道的套接字建立的连接。该方法的行为方式与
accept(Object, CompletionHandler)方法完全相同,只是该方法不指定完成处理程序,而是返回一个Future表示未决结果。Future的get方法在成功完成后将AsynchronousSocketChannel返回到新连接。- 返回:
-
代表未决结果的
Future对象 - 抛出:
AcceptPendingException- 如果接受操作已经在这个通道上进行NotYetBoundException- 如果此通道的套接字尚未绑定
-
getLocalAddress
返回此通道的套接字绑定到的套接字地址。如果通道是
bound到 Internet 协议套接字地址,则此方法的返回值是InetSocketAddress类型。如果设置了安全管理器,则以本地地址和
-1作为参数调用其checkConnect方法,以查看是否允许该操作。如果不允许该操作,则返回表示loopback地址和通道套接字的本地端口的SocketAddress。- 指定者:
getLocalAddress在接口NetworkChannel中- 返回:
-
套接字绑定到的
SocketAddress,或者如果被安全管理器拒绝则代表环回地址的SocketAddress,或者如果通道的套接字未绑定则为null - 抛出:
ClosedChannelException- 如果通道关闭IOException- 如果发生 I/O 错误
-