Java NIO ServerSocketChannel
精华
小牛编辑
188浏览
2023-03-14
1 ServerSocketChannel的介绍
Java NIO ServerSocketChannel是一个通道,可以侦听传入的TCP连接,就像ServerSocket在标准Java Networking中一样。该ServerSocketChannel班位于java.nio.channels包。
这是一个例子:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9999));
while(true){
SocketChannel socketChannel =
serverSocketChannel.accept();
//do something with socketChannel...
}
2 打开一个ServerSocketChannel
ServerSocketChannel通过调用该ServerSocketChannel.open() 方法来 打开一个。看起来是这样的:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
3 关闭ServerSocketChannel
ServerSocketChannel通过调用ServerSocketChannel.close() 方法来 关闭a 。看起来是这样的:
serverSocketChannel.close();
4 监听传入的连接
通过调用ServerSocketChannel.accept() 方法来监听传入的连接。当accept()方法返回时,它返回一个SocketChannel与传入的连接。因此,该accept()方法将阻塞,直到传入连接到达为止。
由于您通常不希望仅侦听单个连接,因此可以accept()在while循环中进行调用 。看起来是这样的:
while(true){
SocketChannel socketChannel =
serverSocketChannel.accept();
//do something with socketChannel...
}
当然,除了truewhile循环外,您还可以使用其他停止条件。
5 非阻塞模式
ServerSocketChannel可以将 A设置为非阻止模式。在非阻塞模式下,该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...
}
}