了解 InetAddress.isReachable() 結果
InetAddress 類別提供了一種獲取有關網路位址資訊的機制。它的方法之一 isReachable() 檢查是否可以從本機電腦存取主機。但是,使用者可能會遇到 ping IP 位址與 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中文網其他相關文章!