Java NIO的ServerSocketChannel

java NIO的ServerSocketChannel是一个能监听TCP链接的channel。就像标准java网络中的ServerSocket。ServerSocketChannel类位于java.io.channel包下。

这里有一个例子:

ServerSocketChannel    serverSocketChannel=ServerSocketChannel.open();

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

while(true){

SocketChannel  socketChannel=serverSocketChannel.accept();

//do  something  with socketChannel...

}


1.打开一个ServerSocketChannel

通过调用ServerSocketChannel.open()方法,你可以打开一个ServerSocketChannel。这里有个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();


2.关闭一个ServerSocketChannel

调用ServerSocketChannel.close()方法可以关闭一个ServerSocketChannel通道。下面是示例:

serverSocketChannel.close();


3.监听到来的连接请求

调用ServerSocketChannel.accept()方法可以监听链接请求。当accept()方法返回时,它会返回的是该连接所对应的SocketChannel。因此,在一个连接请求到达之前,accept()方法会一直阻塞住。

比如:

while(true){

    SocketChannel socketChannel =

            serverSocketChannel.accept();

    //do something with socketChannel...

}

当然,你在while循环中也可以使用其他停止条件而不是true。


4.非阻塞模式

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

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)