Java NIO的ServerSocketChannel是用来监听外来TCP连接的channel,就想标准Java网络中的ServerSocket。实例如下:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(8090));
while(true) {
SocketChannel socketChannel = serverSocketChannel.accept();
}
通过open方法打开
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
通过close方法
监听外来连接通过调用accept方法,当accept方法返回,将返回一个连接的SocketChannel。所以accept方法会阻塞直到有连接。
由于一般情况对单个连接没有监听的兴趣,你可以在循环内调用accept方法。
while(true) {
SocketChannel socketChannel = serverSocketChannel.accept();
}
当然,你应该使用一些退出循环的条件,而不是true。
ServerSocketChannel能设置成非阻塞模式,在非阻塞模式下,accept方法立即返回,有可能返回null(如果没有连接建立)。因此你必须检查返回的SocketChannel是不是null。如下:
while(true) {
SocketChannel socketChannel = serverSocketChannel.accept();
if(socketChannel!=null) {
}
}