私のネットワーク上の特定のホストに到達可能かどうかを調べようとしています。次のように 私のJavaコードは次のとおりです。Java InetAddress.isReachable()timeout
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
これは非常にうまく機能し、私が代わりに500ミリ秒を言うためにタイムアウトを下げた場合しかし、それはもはや到達可能なホストを指定しません。私はかなりの数のホストをループでチェックするつもりですので、タイムアウトを低くすることは非常に重要です。 Windowsのコマンドラインからホストに手動でpingを実行すると、10ミリ秒以下の時間がかかります。
なぜJavaメソッドは成功するためにはるかに高いタイムアウトが必要ですか? isReachable()
を使用する方法はありますか?
本当にありがとうございます。私は、検索する必要のあるデバイスで使用されているポート10001のホストに接続したい/チェックしたいと思います。既知のポートチェックを実装する方法の例を教えてください。 – Jerome
さて、ノンブロッキングI/O(NIO)メソッドを実装することはしません。しかし、私はソケットを作成すると言うでしょう。宛先IPとポート10001を持つSocketAddressを作成し、適切なタイムアウトでsocket.connect(SocketAddress、timeout)を呼び出します。 Catch TimeOutException。 socket.connect()が例外なく返ってきたら、ソケットを閉じると、そのデバイスが10001をリッスンしていることがわかります。NIOモデルの場合は、Nettyのオープンソースプロジェクトとサンプルを見てください。 – brettw