Java NIO(十) ServerSocketChannel

Java NIO ServerSocketChannel是一个可以侦听传入TCP连接的通道,就像标准Java Networking中的ServerSocket一样。 ServerSocketChannel类位于java.nio.channels包中。
这是一个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

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

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

    //do something with socketChannel...
}

Opening a ServerSocketChannel

通过调用ServerSocketChannel.open()方法打开一个ServerSocketChannel。 这是如何看起来如此:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

Closing a ServerSocketChannel

关闭ServerSocketChannel是通过调用ServerSocketChannel.close()方法完成的。 这是如何看起来如此:

serverSocketChannel.close();

监听传入的连接

监听传入的连接是通过调用ServerSocketChannel.accept()方法完成的。 accept()方法返回时,它将返回一个带有传入连接的SocketChannel。 因此,accept()方法阻塞,直到传入的连接到达。

由于您通常不希望只听一个连接,所以您可以在while循环中调用accept()。 这是如何看起来如此:

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

    //do something with socketChannel...
}

当然,你会在while循环中使用其他的停止标准。

非阻塞模式

ServerSocketChannel可以设置为非阻塞模式。 在非阻塞模式下,accept()方法立即返回,如果没有到达连接,可能会返回null。 因此,您将不得不检查返回的SocketChannel是否为空。 这里是一个例子:

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(十) ServerSocketChannel)