Maison >Java >javaDidacticiel >Pourquoi InetAddress.isReachable() diffère-t-il parfois des résultats de ping ?
Comprendre les résultats d'InetAddress.isReachable()
La classe InetAddress fournit un mécanisme pour obtenir des informations sur les adresses réseau. L'une de ses méthodes, isReachable(), vérifie si un hôte est accessible depuis la machine locale. Cependant, les utilisateurs peuvent rencontrer des écarts entre le ping d'une adresse IP et le résultat de InetAddress.isReachable().
Indépendance de la plate-forme pour les tests d'accessibilité
Pour une solution indépendante de la plate-forme , pensez à utiliser le code suivant, qui nécessite la connaissance d'un port ouvert sur la cible 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; } }
Version succincte mise à jour
Basée sur un commentaire récent, voici une version plus concise du code ci-dessus :
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; } }
Cette solution est indépendante de la plateforme et fournit des résultats d'accessibilité fiables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!