- 所有已实现的接口:
-
Closeable
,AutoCloseable
,AsynchronousChannel
,Channel
,NetworkChannel
通过调用此类的 open
方法来创建一个异步服务器套接字通道。新创建的异步服务器套接字通道是打开的,但尚未绑定。可以通过调用 bind
方法将其绑定到本地地址并配置为监听连接。绑定后,使用 accept
方法来启动接受通道套接字的连接。在未绑定通道上调用 accept
方法将导致抛出 NotYetBoundException
。
此类型的通道可安全地供多个并发线程使用,尽管任何时候最多只能有一个接受操作处于未完成状态。如果一个线程在上一个接受操作完成之前启动了一个接受操作,则会抛出 AcceptPendingException
。
可以使用 setOption
方法配置套接字选项。此类型的通道支持以下选项:
还可能支持其他(特定于实现的)选项。
选项名称 描述 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) {
// 接受下一个连接
listener.accept(null, this);
// 处理此连接
handle(ch);
}
public void failed(Throwable exc, Void att) {
...
}
});
- 自从:
- 1.7
-
Constructor Summary
ModifierConstructorDescriptionprotected
初始化此类的新实例。 -
Method Summary
Modifier and TypeMethodDescriptionabstract Future
<AsynchronousSocketChannel> accept()
接受连接。abstract <A> void
accept
(A attachment, CompletionHandler<AsynchronousSocketChannel, ? super A> handler) 接受连接。bind
(SocketAddress local) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract AsynchronousServerSocketChannel
bind
(SocketAddress local, int backlog) 将通道的套接字绑定到本地地址并配置套接字以监听连接。abstract SocketAddress
返回此通道的套接字绑定到的套接字地址。open()
打开一个异步服务器套接字通道。open
(AsynchronousChannelGroup group) 打开一个异步服务器套接字通道。provider()
返回创建此通道的提供程序。abstract <T> AsynchronousServerSocketChannel
setOption
(SocketOption<T> name, T value) 设置套接字选项的值。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.AsynchronousChannel
close
Methods declared in interface java.nio.channels.NetworkChannel
getOption, supportedOptions
-
Constructor Details
-
AsynchronousServerSocketChannel
初始化此类的新实例。- 参数:
-
provider
- 创建此通道的提供程序
-
-
Method Details
-
provider
返回创建此通道的提供程序。- 返回:
- 创建此通道的提供程序
-
open
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group) throws IOException 打开一个异步服务器套接字通道。通过在创建给定组的
openAsynchronousServerSocketChannel
方法上调用AsynchronousChannelProvider
对象来创建新通道。如果组参数为null
,则结果通道由系统范围内的默认提供程序创建,并绑定到 默认组。- 参数:
-
group
- 应将新构造的通道绑定到的组,或者对于默认组使用null
- 返回:
- 一个新的异步服务器套接字通道
- 抛出:
-
ShutdownChannelGroupException
- 如果通道组已关闭 -
IOException
- 如果发生 I/O 错误
-
open
打开一个异步服务器套接字通道。此方法返回一个绑定到 默认组 的异步服务器套接字通道。此方法等效于评估以下表达式:
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
- socket选项值的类型 - 参数:
-
name
- socket选项 -
value
- socket选项的值。对于某些socket选项,null
可能是有效的值。 - 返回:
- 此通道
- 抛出:
-
IllegalArgumentException
- 如果值不是此socket选项的有效值 -
ClosedChannelException
- 如果此通道已关闭 -
IOException
- 如果发生I/O错误 - 参见:
-
accept
public abstract <A> void accept(A attachment, CompletionHandler<AsynchronousSocketChannel, ? super A> handler) 接受连接。此方法启动一个异步操作,接受连接到此通道套接字的连接。
handler
参数是一个完成处理程序,当连接被接受(或操作失败)时调用。传递给完成处理程序的结果是新连接的AsynchronousSocketChannel
。当接受新连接时,结果的
AsynchronousSocketChannel
将绑定到与此通道相同的AsynchronousChannelGroup
。如果组已关闭
并且接受了连接,则连接将关闭,并且操作将以IOException
完成,并导致ShutdownChannelGroupException
。为了允许并发处理新连接,当立即接受新连接时,启动线程不会直接调用完成处理程序(请参阅线程)。
如果安全管理器已安装,则它会验证连接的远程端点的地址和端口号是否被安全管理器的
checkAccept
方法允许。权限检查是使用调用此方法的调用上下文限制的权限执行的。如果权限检查失败,则连接将关闭,并且操作将以SecurityException
完成。- 类型参数:
-
A
- 附件的类型 - 参数:
-
attachment
- 要附加到I/O操作的对象;可以为null
-
handler
- 用于消耗结果的处理程序 - 抛出:
-
AcceptPendingException
- 如果此通道上已经有一个接受操作正在进行 -
NotYetBoundException
- 如果此通道的套接字尚未绑定 -
ShutdownChannelGroupException
- 如果通道组已终止
-
accept
接受连接。此方法启动一个异步操作,接受连接到此通道套接字的连接。该方法的行为与
accept(Object, CompletionHandler)
方法完全相同,只是不是指定完成处理程序,而是返回表示挂起结果的Future
。Future
的get
方法在成功完成时返回新连接的AsynchronousSocketChannel
。- 返回:
-
表示挂起结果的
Future
对象 - 抛出:
-
AcceptPendingException
- 如果此通道上已经有一个接受操作正在进行 -
NotYetBoundException
- 如果此通道的套接字尚未绑定
-
getLocalAddress
返回此通道套接字绑定到的套接字地址。如果通道
绑定
到Internet协议套接字地址,则此方法的返回值类型为InetSocketAddress
。如果设置了安全管理器,则将使用本地地址和
-1
作为参数调用其checkConnect
方法,以查看操作是否被允许。如果不允许操作,则返回表示环回
地址和通道套接字的本地端口的SocketAddress
。- 指定由:
-
getLocalAddress
在接口NetworkChannel
- 返回:
-
套接字绑定到的
SocketAddress
,如果安全管理器拒绝,则表示环回地址的SocketAddress
,如果通道套接字未绑定则为null
- 抛出:
-
ClosedChannelException
- 如果通道已关闭 -
IOException
- 如果发生I/O错误
-