public abstract class ServerSocketChannel extends AbstractSelectableChannel implements NetworkChannel
通过调用此类的open方法创建服务器套接字通道。 不可能为任意的,预先存在的ServerSocket创建一个通道。 新创建的服务器套接字通道已打开但尚未绑定。 尝试调用未绑定服务器套接字通道的8841884884818方法将导致抛出NotYetBoundException 。 可以通过调用此类定义的bind方法之一来绑定服务器套接字通道。
套接字选项使用setOption方法进行配置。 服务器端口通道支持以下选项:
还可以支持附加(实现特定)选项。
Option Name 描述 SO_RCVBUFThe size of the socket receive buffer SO_REUSEADDRRe-use address
服务器套接字通道可以安全地被多个并发线程使用。
| Modifier | Constructor and Description |
|---|---|
protected |
ServerSocketChannel(SelectorProvider provider)
初始化此类的新实例。
|
| Modifier and Type | Method and Description |
|---|---|
abstract SocketChannel |
accept()
接受与此频道套接字的连接。
|
ServerSocketChannel |
bind(SocketAddress local)
将通道的套接字绑定到本地地址,并配置套接字以监听连接。
|
abstract ServerSocketChannel |
bind(SocketAddress local, int backlog)
将通道的套接字绑定到本地地址,并配置套接字以监听连接。
|
abstract SocketAddress |
getLocalAddress()
返回此通道的套接字所绑定的套接字地址。
|
static ServerSocketChannel |
open()
打开服务器插槽通道。
|
abstract <T> ServerSocketChannel |
setOption(SocketOption<T> name, T value)
设置套接字选项的值。
|
abstract ServerSocket |
socket()
检索与此通道关联的服务器套接字。
|
int |
validOps()
返回确定此频道支持的操作的操作集。
|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, registerregisterbegin, close, end, isOpenclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetOption, supportedOptionsprotected ServerSocketChannel(SelectorProvider provider)
provider - 创建此频道的提供商
public static ServerSocketChannel open() throws IOException
通过调用系统范围默认的SelectorProvider对象的openServerSocketChannel方法创建新通道。
新频道的套接字最初未绑定; 必须通过其套接字的bind方法将其绑定到特定的地址,才能接受连接。
IOException - 如果发生I / O错误
public final int validOps()
服务器套接字通道仅支持接受新连接,因此此方法返回SelectionKey.OP_ACCEPT 。
validOps在
SelectableChannel
public final ServerSocketChannel bind(SocketAddress local) throws IOException
此方法的调用等同于以下内容:
bind(local, 0);
bind在接口
NetworkChannel
local - 绑定套接字的本地地址,或
null绑定到自动分配的套接字地址
AlreadyBoundException - 如果套接字已经绑定
UnsupportedAddressTypeException - 如果不支持给定地址的类型
ClosedChannelException - 如果通道关闭
IOException - 如果发生其他I / O错误
SecurityException - 如果已安装安全管理员,并且其
checkListen方法拒绝操作
NetworkChannel.getLocalAddress()
public abstract ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException
该方法用于在套接字和本地地址之间建立关联。 一旦建立关联,则套接字保持绑定,直到通道关闭。
backlog参数是套接字上挂起的连接的最大数量。 其确切语义是实现具体的。 特别地,实现可以施加最大长度,或者可以选择忽略参数altogther。 如果backlog参数的值为0或负值,则使用实现特定的默认值。
local - 绑定套接字的地址,或
null绑定到自动分配的套接字地址
backlog - 待处理连接的最大数量
AlreadyBoundException - 如果套接字已经绑定
UnsupportedAddressTypeException - 如果不支持给定地址的类型
ClosedChannelException - 如果此通道关闭
IOException - 如果发生其他I / O错误
SecurityException - 如果已安装安全管理员,并且其
checkListen方法拒绝操作
public abstract <T> ServerSocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel复制
setOption在接口
NetworkChannel
T - 套接字选项值的类型
name - 套接字选项
value - 套接字选项的值。
null的值可能是某些套接字选项的有效值。
UnsupportedOperationException - 如果此通道不支持套接字选项
IllegalArgumentException - 如果该值不是此套接字选项的有效值
ClosedChannelException - 如果此通道关闭
IOException - 如果发生I / O错误
StandardSocketOptions
public abstract ServerSocket socket()
返回的对象不会声明任何未在ServerSocket类中声明的公共方法。
public abstract SocketChannel accept() throws IOException
如果该信道是在非阻塞模式,则此方法将立即返回null,如果没有未决的连接。 否则,它将无限期地阻塞,直到有新的连接或发生I / O错误。
无论此通道的阻塞模式如何,通过此方法返回的套接字通道(如果有)将处于阻塞模式。
该方法执行与ServerSocket类的accept方法完全相同的安全检查。 也就是说,如果已经安装了一个安全管理器,那么对于每个新的连接,该方法将通过安全管理器的checkAccept方法验证连接的远程端点的地址和端口号是否被允许。
ClosedChannelException - 如果此频道关闭
AsynchronousCloseException - 如果另一个线程在接受操作进行中关闭此通道
ClosedByInterruptException - 如果另一个线程在接受操作进行过程中中断当前线程,从而关闭通道并设置当前线程的中断状态
NotYetBoundException - 如果此通道的套接字尚未绑定
SecurityException - 如果已安装安全管理器,并且不允许访问新连接的远程端点
IOException - 如果发生其他I / O错误
public abstract SocketAddress getLocalAddress() throws IOException
其中通道是bound到Internet协议套接字地址,则此方法的返回值为InetSocketAddress 。
如果有一个安全管理器集,它的checkConnect方法被调用本地地址,并且-1作为参数来查看是否允许该操作。 如果不允许的操作, SocketAddress代表loopback个地址和通道的套接字的本地端口返回。
getLocalAddress在接口
NetworkChannel
SocketAddress ,该套接字绑定到,或
SocketAddress代表的环回地址,如果安全管理器拒绝,或
null如果通道的套接字不绑定
ClosedChannelException - 如果通道关闭
IOException - 如果发生I / O错误
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.