我想知道我的網絡上的特定主機是否可達。 我的Java代碼如下:Java InetAddress.isReachable()timeout
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
這工作得很好,但是如果我降低超時說500毫秒,而不是,也不會指定主機到達了。我打算在一個循環中檢查不少主機,因此暫停時間很短很重要。如果我從Windows命令行手動ping主機,它將少於10ms。
那麼爲什麼Java方法需要更高的超時才能成功呢? 有沒有其他方法可以使用isReachable()
?
謝謝,基本上是的,我想連接到/檢查我需要找到的設備使用的端口10001上的主機。你可能舉出一個如何實現這個已知端口檢查的例子嗎? – Jerome 2012-03-04 14:36:05
那麼,我不會去實現一個非阻塞I/O(NIO)方法。但我會說只是創建一個套接字。使用目標IP和端口10001創建一個SocketAddress。然後使用適當的超時值調用socket.connect(SocketAddress,timeout)。 Catch TimeOutException。如果socket.connect()毫無例外地返回,請關閉套接字,您知道設備正在10001上進行偵聽。對於NIO模型,請查看Netty開源項目和示例。 – brettw 2012-03-04 14:45:09