Maison > Java > javaDidacticiel > Pourquoi InetAddress.isReachable() renvoie-t-il parfois False même lorsque le ping réussit ?

Pourquoi InetAddress.isReachable() renvoie-t-il parfois False même lorsque le ping réussit ?

Barbara Streisand
Libérer: 2024-12-02 09:18:10
original
633 Les gens l'ont consulté

Why Does InetAddress.isReachable() Sometimes Return False Even When Ping Succeeds?

Dévoilement de la déconnexion : pourquoi InetAddress.isReachable() signale faussement

Lorsque vous tentez de déterminer l'accessibilité d'une adresse IP à l'aide d'InetAddress.isReachable (), les utilisateurs peuvent rencontrer de fausses réponses inattendues même s'ils parviennent à envoyer une requête ping à la même adresse. Cet écart peut être attribué aux limitations de la mise en œuvre d'isReachable().

Contrairement au ping, qui envoie directement un paquet réseau à l'adresse IP cible, isReachable() s'appuie sur un mécanisme dépendant de la plate-forme connu sous le nom d'ICMP (Internet Control Message Protocol) demandes d'écho. Si la requête ICMP ne reçoit pas de réponse dans le délai d'expiration spécifié, isReachable() renvoie false, même si l'adresse IP est toujours accessible.

Fournir une solution multiplateforme

Pour une solution indépendante de la plate-forme qui englobe une gamme de vérifications de connectivité, envisagez d'utiliser une technique qui recherche les ports ouverts sur la machine cible. Cette approche exploite le fait que la plupart des appareils possèdent des ports ouverts pour des services tels que SSH, des serveurs Web ou des serveurs de messagerie.

Voici un extrait de code qui implémente cette méthode :

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;
    }
}
Copier après la connexion

En utilisant Grâce à cette technique, vous obtenez la possibilité de déterminer l'accessibilité quelle que soit la plate-forme sous-jacente, garantissant ainsi des résultats plus cohérents.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal