Maison >Java >javaDidacticiel >Pourquoi InetAddress.isReachable() diffère-t-il parfois des résultats de ping ?

Pourquoi InetAddress.isReachable() diffère-t-il parfois des résultats de ping ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 01:55:10309parcourir

Why Does InetAddress.isReachable() Sometimes Differ from Ping Results?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn