我寫了一個簡單的Java NIO程序像下面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);
//到這裏的代碼創建頂部2連接到端口52209和52210
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個連接,它往往會造成2個連接標準的TCP攔截庫。
我使用JDK 1.7和Windows 7
在圖像只有4個高亮顯示連接是它們由客戶端創建的興趣。
標有紅色的一個連接1條目是服務器端口。
PFA顯示這4個連接的圖像。
嗯,我實際上可以最明白的是爲什麼
Selector incomingMessageSelector = Selector.open();
創建一個動態端口上的連接
這聽起來很奇怪。恕我直言,我發現阻止NIO更簡單的工作,更快,如果你有少量的連接。 –
從API可能會更簡單,但是我更關注爲什麼在TCP層創建4個連接時,只有1個連接是從代碼創建的。 – Sudarshan
您可以包含「端口50512和50513」的條目嗎?它們不在您的圖像中。 –