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) {
...
}
});
Modifier | Constructor and Description |
---|---|
protected |
AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
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)
设置套接字选项的值。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close
getOption, supportedOptions
protected AsynchronousServerSocketChannel(AsynchronousChannelProvider provider)
provider
- 创建此频道的提供商
public final AsynchronousChannelProvider provider()
public static AsynchronousServerSocketChannel open(AsynchronousChannelGroup group) throws IOException
通过在创建给定组的AsynchronousChannelProvider
对象上调用openAsynchronousServerSocketChannel
方法创建新通道。 如果组参数为null,则生成的通道由系统级默认提供程序创建,并绑定到默认组 。
group
- 新建渠道应绑定的群组,或默认群组
null
ShutdownChannelGroupException
- 如果通道组关闭
IOException
- 如果发生I / O错误
public static AsynchronousServerSocketChannel open() throws IOException
此方法返回绑定到默认组的异步服务器套接字通道。 此方法等效于评估表达式:
open((AsynchronousChannelGroup)null);
IOException
- 如果发生I / O错误
public final AsynchronousServerSocketChannel bind(SocketAddress local) throws IOException
此方法的调用等同于以下内容:
bind(local, 0);
bind
在界面
NetworkChannel
local
- 绑定套接字的本地地址,或
null绑定到自动分配的套接字地址
AlreadyBoundException
- 如果套接字已经绑定
UnsupportedAddressTypeException
- 如果不支持给定地址的类型
SecurityException
- 如果安装了一个安全管理器,并且拒绝了未指定的权限。
此接口的实现应指定任何所需的权限。
ClosedChannelException
- 如果通道关闭
IOException
- 如果发生其他I / O错误
NetworkChannel.getLocalAddress()
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错误
public abstract <T> AsynchronousServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel
setOption
在接口
NetworkChannel
T
- 套接字选项值的类型
name
- 套接字选项
value
- 套接字选项的值。
值为null
可能是某些套接字选项的有效值。
IllegalArgumentException
- 如果该值不是此套接字选项的有效值
ClosedChannelException
- 如果此通道关闭
IOException
- 如果发生I / O错误
StandardSocketOptions
public abstract <A> void accept(A attachment, CompletionHandler<AsynchronousSocketChannel,? super A> handler)
此方法启动异步操作以接受对该通道的套接字进行的连接。 handler
参数是一个完成处理程序,在连接被接受时被调用(或者操作失败)。 传递到完成处理的结果是AsynchronousSocketChannel
到新的连接。
当一个新的连接被接受则所得AsynchronousSocketChannel
将被绑定到相同的AsynchronousChannelGroup
作为此信道。 如果组是shutdown
并且接受连接,则连接被关闭,并且操作完成与IOException
并且导致ShutdownChannelGroupException
。
为了允许新连接的并发处理,当立即接受新连接时,完成处理程序不会被启动线程直接调用(请参阅Threading )。
如果安装了一个安全管理器,那么验证安全管理器的checkAccept
方法允许连接的远程端点的地址和端口号。 权限检查由受此方法的调用上下文限制的权限执行。 如果权限检查失败,则连接被关闭,并且操作以SecurityException
完成 。
A
-
A
的类型
attachment
- 要附加到I / O操作的对象;
可以是null
handler
- 消费结果的处理程序
AcceptPendingException
- 如果此通道上已经有接受操作
NotYetBoundException
- 如果此通道的套接字尚未绑定
ShutdownChannelGroupException
- 如果通道组已终止
public abstract Future<AsynchronousSocketChannel> accept()
此方法启动异步操作以接受对该通道的套接字进行的连接。 该方法的行为方式与accept(Object, CompletionHandler)
方法完全相同,不同的是,该方法不是指定完成处理程序,而是返回一个Future
待处理结果的Future
。 Future
的get
方法在成功完成后返回到新连接的AsynchronousSocketChannel
。
Future
待处理结果的
Future
对象
AcceptPendingException
- 如果此通道上已经有接受操作
NotYetBoundException
- 如果此通道的套接字尚未绑定
public abstract SocketAddress getLocalAddress() throws IOException
通道为Internet协议套接字地址的bound
,则此方法的返回值为InetSocketAddress
。
如果有一个安全管理器集,它的checkConnect
方法被调用本地地址和-1
作为参数来查看是否允许该操作。 如果不允许的操作, SocketAddress
代表loopback
个地址和通道的套接字的本地端口返回。
getLocalAddress
中的
NetworkChannel
SocketAddress
,该套接字绑定到,或
SocketAddress
代表的环回地址,如果安全管理器拒绝,或
null
如果通道的套接字不绑定
ClosedChannelException
- 如果通道关闭
IOException
- 如果发生I / O错误