首頁 >Java >java教程 >為什麼我的 Java 程式碼無法 Ping 本地主機以外的主機?

為什麼我的 Java 程式碼無法 Ping 本地主機以外的主機?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-25 17:42:57361瀏覽

Why is My Java Code Failing to Ping Hosts Other Than Localhost?

在Java 中使用Ping 排除主機可達性問題

在Java 中,可以使用InetAddress.isReachable() 方法對執行ping 操作。但是,有時可能會遇到無法存取 localhost 以外的主機的問題。

原始問題

考慮以下Java 程式碼片段:

<code class="java">public static void main(String[] args) throws UnknownHostException, IOException {
    String ipAddress = "127.0.0.1";
    InetAddress inet = InetAddress.getByName(ipAddress);

    System.out.println("Sending Ping Request to " + ipAddress);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");

    ipAddress = "173.194.32.38";
    inet = InetAddress.getByName(ipAddress);

    System.out.println("Sending Ping Request to " + ipAddress);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");
}</code>

此程式碼的輸出為:

Sending Ping Request to 127.0.0.1
Host is reachable
Sending Ping Request to 173.194.32.38
Host is NOT reachable

此結果顯示ping localhost 成功,但其他主機無法存取。

解決方案說明

根據Java文件中的InetAddress.isReachable()方法:

"...如果可以取得
權限,典型的實作將使用ICMP ECHO REQUEST,否則它將嘗試建立目標主機連接埠7 (Echo) 上的TCP
連接...」

選項#1(使用ICMP ECHO 請求)通常需要管理(root)權限。如果未授予這些權限,則該方法將嘗試使用 TCP 來確定可達性。

結論

當 ping localhost 以外的主機時遇到問題,可能是不授予 ICMP 權限。確保授予必要的權限可以解決主機無法存取錯誤。

以上是為什麼我的 Java 程式碼無法 Ping 本地主機以外的主機?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn