Menyiasat Kebolehcapaian Palsu daripada InetAddress.isReachable()
InetAddress, kelas Java untuk bekerja dengan alamat IP, menyediakan kaedah untuk pelbagai rangkaian- tugasan yang berkaitan. Satu kaedah sedemikian ialah isReachable(), digunakan untuk menentukan sama ada hos boleh diakses melalui rangkaian. Walau bagaimanapun, dalam sesetengah kes, kaedah ini mungkin kembali palsu walaupun apabila ping alamat IP berjaya.
Pertimbangkan coretan kod berikut yang cuba menyemak kebolehcapaian hos:
InetAddress byName = InetAddress.getByName("173.39.161.140"); System.out.println(byName); System.out.println(byName.isReachable(1000));
Jika anda menjalankan kod ini, anda mungkin menghadapi situasi di mana isReachable() mengembalikan palsu, walaupun pada hakikatnya anda boleh ping IP yang ditentukan alamat.
Untuk menangani isu ini, pendekatan alternatif dibentangkan, yang kekal bebas platform dan memanfaatkan maklumat tentang port terbuka pada mesin jauh.
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; } }
Dengan menggunakan kod ini, anda boleh menentukan kebolehcapaian hos dengan cuba mewujudkan sambungan ke port terbuka yang diketahui pada itu hos.
Kemas kini:
Untuk versi yang lebih ringkas bagi coretan kod, rujuk perkara berikut:
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; } }
Dengan menggunakan pendekatan ini , anda boleh menentukan kebolehcapaian hos dengan pasti, walaupun dalam senario di mana InetAddress.isReachable() tidak memberikan yang tepat petunjuk.
Atas ialah kandungan terperinci Mengapakah `InetAddress.isReachable()` Kadang-kadang Kembali Palsu Walaupun Hos Boleh Ping?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!