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...
}
1.打開一個ServerSocketChannel
可以通過調用ServerSocketChannel.open()方法來打開ServerSocketChannel:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
2.關閉ServerSocketChannel
通過調用ServerSocketChannel.close()方法來關閉ServerSocketChannel:
serverSocketChannel.close();
3.監聽連接配接
通過調用ServerSocketChannel.accept()方法來監聽連接配接。當accept()方法傳回時,它将傳回連接配接的SocketChannel。是以,accept()方法将阻塞,直到傳入連接配接到達為止。
通常不會僅監聽一個連接配接,是以可以在while循環内調用accept():
while(true){
SocketChannel socketChannel =
serverSocketChannel.accept();
//do something with socketChannel...
}
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...
}
}
原文位址: https://www.zhblog.net/go/java/tutorial/java-nio-server-socket-channel?t=617