Menyelesaikan Masalah Kebolehcapaian Hos Menggunakan Ping dalam Java
Di Java, ping alamat IP boleh dilakukan menggunakan kaedah InetAddress.isReachable(). Walau bagaimanapun, kadangkala ia mungkin menghadapi isu apabila hos selain localhost kelihatan tidak dapat dicapai.
Masalah Asal
Pertimbangkan coretan kod Java berikut:
<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>
Keluaran kod ini ialah:
Sending Ping Request to 127.0.0.1 Host is reachable Sending Ping Request to 173.194.32.38 Host is NOT reachable
Hasil ini menunjukkan bahawa ping localhost berjaya, tetapi hos lain tidak dapat dicapai.
Penjelasan Penyelesaian
Menurut kaedah InetAddress.isReachable() dalam dokumentasi Java:
"... Pelaksanaan tipikal akan menggunakan ICMP ECHO REQUESTs jika keistimewaan
boleh diperolehi, jika tidak, ia akan cuba mewujudkan sambungan TCP
pada port 7 (Echo) hos destinasi..."
Pilihan #1 (menggunakan ICMP ECHO REQUESTs) biasanya memerlukan keistimewaan pentadbiran (root). Jika keistimewaan ini tidak diberikan, kaedah akan cuba menggunakan TCP untuk menentukan kebolehcapaian.
Kesimpulan
Apabila menghadapi masalah dengan ping hos selain localhost, ada kemungkinan bahawa Keistimewaan ICMP tidak diberikan. Memastikan bahawa keistimewaan yang diperlukan diberikan dapat menyelesaikan ralat Host Not Reachable.
Atas ialah kandungan terperinci Mengapa Kod Java Saya Gagal Ping Hos Selain Localhost?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!