【Java.NIO】API —— Channel接口 —— ServerSocketChannel类

本文介绍了Java NIO中的ServerSocketChannel类,包括其主要方法、如何创建实例及绑定端口等。文章还提供了一个非阻塞模式下的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.nio.channels
public abstract class ServerSocketChann extends AbstractSelectableChannel implements NetworkChannel


ServerSocketChannel从SelectableChannel中继承了configureBlocking()和register()方法。

ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样


ServerSocketChannel并没有public类型的构造方法,必须通过静态方法open()来创建ServerSocketChannel对象。每个ServerSocketChannel对象都与一个ServerSocket对象关联。ServerSocketChannel的socket()方法返回与他关联的ServerSocket对象。可通过以下方式把服务器进程绑定到一个本地端口:

serverSocketChannel.socket().bind(port);


ServerSocketChannel的主要方法如下:

  • open() —— 静态工厂方法,返回一个ServerSocketChannel对象,这个对象没有与任何本地端口绑定,并且处于阻塞模式
  • close() —— 关闭ServerSocketChannel
  • accept() —— 类似于ServerSocket的accept()方法,用于接受客户的连接。如果ServerSocketChannel处于非阻塞状态,当没有客户连接时,该方法立即返回null;如果ServerSocketChannel处于阻塞的状态,当没有客户连接时,它会一直阻塞下去,直到有客户连接就绪,或者出现了IOException
  • configureBlocking —— 设置阻塞/非阻塞模式
  • validOps() —— 返回ServerSocketChannel所能产生的事件,这个方法总是返回SelctionKey.OP_ACCEPT
  • socket() —— 返回与ServerSocketChannel关联的ServerSocket对象,每个ServerSocketChannel对象都与一个ServerSocket对象关联



非阻塞模式示例:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

serverSocketChannel.socket().bind(new InetSocketAddress(9999));
serverSocketChannel.configureBlocking(false);

while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();

    if (socketChannel != null){
        // do something with socketChannel... ...
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值