Java NIO ServerSocketChannel是一個監聽TCP鏈接的Channel,如Java 標準網絡中的ServerSocket。ServerSocketChannel類是在java.nio.channels包下。java
下面是一個例子:bash
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket.bind(new InetAddress(9990));
while(true){
SocketChannel socketChannel = serverSocketChannle.accept();
// do something with socketChannel
}
複製代碼
能夠經過ServerSocketChannel的open方法來打開ServerSocketChannel。以下所示:網絡
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
複製代碼
關閉ServerSocketChannel能夠經過ServerSocketChannel的close()方法來實現。以下所示: serverSocketChannel.close();socket
能夠經過ServerSocketChannel的accept()來監聽新進來的鏈接。當accept()方法返回時,它將返回SocketChannel對象。所以,accept()方法會阻塞直接有新的鏈接進來。spa
一般不會僅僅只監聽一個鏈接,在while循環中調用 accept()方法. 以下面的例子:code
while(true){
SocketChannel socketChannel =
serverSocketChannel.accept();
//do something with socketChannel...
}
複製代碼
固然也能夠在while循環中使用除了true之外的其餘條件。server
一個ServerSocketChannel能夠被設置工做在非阻塞模式。在非阻塞模式中,accept()方法會當即返回。所以它可能會返回null若是沒有新的鏈接進來。所以,你必須檢查返回的SocketChannel對象是否爲null。對象
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9990));
serverSocketChannel.configureBlocking(false);
while(true){
SocketChannel socketChannel = serverSocketChannel.accept();
if(seocketChannle != null){
// do something with socketChannel...
}
}
複製代碼