Java NIO之ServerSocketChannel类

ServerSocketChannel类

简介

该类针对面向流的侦听套接字的可选择通道。

服务器套接字通道不是侦听网络套接字的完整抽象。必须通过调用 socket 方法所获得的关联 ServerSocket 对象来完成对套接字选项的绑定和操作。不可能为任意的已有服务器套接字创建通道,也不可能指定与服务器套接字通道关联的服务器套接字所使用的 SocketImpl 对象。

通过调用此类的 open 方法创建服务器套接字通道。新创建的服务器套接字通道已打开,但尚未绑定。试图调用未绑定的服务器套接字通道的 accept 方法会导致抛出 NotYetBoundException。可通过调用相关服务器套接字的某个 bind 方法来绑定服务器套接字通道。

多个并发线程可安全地使用服务器套接字通道。

代码说明:

public abstract class ServerSocketChannelextends AbstractSelectableChannel
构造方法
protected ServerSocketChannel(SelectorProvider provider)初始化此类的一个新实例。
常用方法
public static ServerSocketChannel open()
                                throws IOException打开服务器套接字通道。 
通过调用系统级默认 SelectorProvider 对象的 openServerSocketChannel 方法来创建新的通道。 

新通道的套接字最初是未绑定的;可以接受连接之前,必须通过它的某个套接字的 bind 方法将其绑定到具体的地址。 


返回:
新的套接字通道 
抛出: 
IOException - 如果发生 I/O 错误
public final int validOps()返回一个操作集,标识此通道所支持的操作。 
服务器套接字通道仅支持接受新的连接,所以此方法返回 SelectionKey.OP_ACCEPT。 


指定者:
类 SelectableChannel 中的 validOps
返回:
有效操作集
public abstract ServerSocket socket()获取与此通道关联的服务器套接字。 
返回的对象不会声明任何在 ServerSocket 类中未声明的公共方法。


返回:
与此通道关联的服务器套接字
public abstract SocketChannel accept()
                              throws IOException接受到此通道套接字的连接。 
如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 

不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。 

此方法执行的安全检查与 ServerSocket 类的 accept 方法执行的安全检查完全相同。也就是说,如果已安装了安全管理器,则对于每个新的连接,此方法都会验证安全管理器的 checkAccept 方法是否允许使用该连接的远程端点的地址和端口号。 


返回:
用于新连接的套接字通道,或者如果此通道处于非阻塞模式并且没有要接受的可用连接,则返回 null 
抛出: 
ClosedChannelException - 如果此通道已关闭 
AsynchronousCloseException - 如果正在进行接受操作时另一个线程关闭了此通道 
ClosedByInterruptException - 如果正在进行接受操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程的状态设置为中断 
NotYetBoundException - 如果尚未绑定此通道的套接字 
SecurityException - 如果已安装安全管理器并且它不允许对新连接的远程端点进行访问 
IOException - 如果发生其他 I/O 错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值