InetAddress.isReachable() が Ping アクセシビリティにもかかわらず False を返す
Java では、InetAddress.isReachable() を使用して、指定された IP が有効かどうかを確認しますアドレスは現在のマシンから到達可能です。驚くべきことに、IP アドレスに正常に ping できても、このメソッドが false を返すシナリオに遭遇する可能性があります。この不一致は、InetAddress.isReachable() が ping と同じメカニズムを使用していないために発生します。代わりに、基盤となるプラットフォームの Internet Control Message Protocol (ICMP) 実装が採用されており、ping コマンドとは異なる場合があります。プラットフォームに依存しないソリューション
この矛盾を解消してプラットフォームの独立性を確保するには、次のアプローチを検討してください。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) { try (Socket soc = new Socket()) { soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis); return true; } catch (IOException ex) { return false; } }
以上がping が成功すると `InetAddress.isReachable()` が False を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。