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

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... ...
    }
}


你可能感兴趣的:(java.nio)