我写了一个简单的java nio程序,如下所示
public static void main(String[] args) throws IOException, InterruptedException {
InetSocketAddress address = new InetSocketAddress("127.0.0.1",1001);
Selector incomingMessageSelector = Selector.open();
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
// 到这里为止,代码创建了到端口 52209 和 52210 的前 2 个连接
socketChannel.connect(address);
socketChannel.register(incomingMessageSelector, SelectionKey.OP_CONNECT);
socketChannel.register(incomingMessageSelector, SelectionKey.OP_WRITE);
socketChannel.register(incomingMessageSelector, SelectionKey.OP_READ);
// 然后它创建 2 个到 1001 端口的连接
Thread.sleep(900000L);
}
我想了解为什么它会创建 4 个连接,而标准 TCP 阻塞库往往会创建 2 个连接。
我使用 JDK 1.7 和 Windows 7。
在图像中,仅对客户端创建的 4 个突出显示的连接感兴趣。
一个用红色标记的连接 1 条目是服务器端口。
PFA 显示这 4 个连接的图像。!
好吧,我真的很困惑为什么
Selector incomingMessageSelector = Selector.open();
在动态端口上创建连接