以下のような単純な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);
// 次に、ポート 1001 への 2 つの接続を作成します
Thread.sleep(900000L);
}
なぜ 4 つの接続が作成されるのかを理解したいのですが、標準の TCP ブロッキング ライブラリでは 2 つの接続が作成される傾向があります。
JDK 1.7 と Windows 7 を使用しています。
画像では、強調表示された 4 つの接続のみが重要であり、クライアントによって作成されます。
赤でマークされた 1 つの接続 1 エントリは、サーバー ポートです。
PFA は、これら 4 つの接続を示すイメージです。
ええと、私は実際にその理由について最も戸惑いました
Selector incomingMessageSelector = Selector.open();
動的ポートで接続を作成します