InetAddress.isReachable() の結果について
InetAddress クラスは、ネットワーク アドレスに関する情報を取得するメカニズムを提供します。そのメソッドの 1 つである isReachable() は、ローカル マシンからホストに到達できるかどうかを確認します。ただし、ユーザーは、IP アドレスの ping と InetAddress.isReachable() の結果の間に不一致が発生する可能性があります。
到達可能性テストのためのプラットフォーム非依存
プラットフォーム非依存のソリューションの場合、ターゲット上で開いているポートの知識が必要となる次のコードの使用を検討してください。 machine:
private static boolean isReachable(String addr, int openPort, int timeOutMillis) { // Any Open port on other machine // openPort = 22 - ssh, 80 or 443 - webserver, 25 - mailserver etc. try (Socket soc = new Socket()) { soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); return true; } catch (IOException ex) { return false; } }
更新された簡潔バージョン
最近のコメントに基づいて、上記のコードのより簡潔なバージョンを次に示します:
private static boolean isReachable(String addr, int openPort, int timeOutMillis) { // Any Open port on other machine // openPort = 22 - ssh, 80 or 443 - webserver, 25 - mailserver etc. try (Socket soc = new Socket()) { soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); return true; } catch (IOException ex) { return false; } }
このソリューションはプラットフォームから独立しており、信頼性の高い到達可能性の結果を提供します。
以上がInetAddress.isReachable() が Ping 結果と異なる場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。