Maison >Java >javaDidacticiel >Pourquoi mon programme Java ne peut-il pas envoyer de requête ping à des hôtes autres que Localhost ?

Pourquoi mon programme Java ne peut-il pas envoyer de requête ping à des hôtes autres que Localhost ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 09:09:02603parcourir

Why Can't My Java Program Ping Hosts Other Than Localhost?

Dépannage du problème de ping dans Java

Lors d'une tentative de ping sur une adresse IP à l'aide de Java, certains utilisateurs peuvent rencontrer un problème d'accessibilité de l'hôte local. mais tous les autres hôtes renvoient un message « L'hôte n'est PAS accessible ». Cet article explore la cause sous-jacente et propose une solution possible.

Illustration du code

L'extrait de code fourni tente d'envoyer une requête ping à deux adresses IP : localhost (127.0.0.1) et une adresse externe (173.194.32.38). La méthode isReachable() renvoie true si l'hôte est joignable dans le délai spécifié (5 000 millisecondes), sinon false.

Cause première

Selon la documentation Java, la méthode isReachable() utilise généralement des REQUETES d'ÉCHO ICMP pour déterminer l'accessibilité de l'hôte. Cependant, l'utilisation d'ICMP nécessite souvent des privilèges élevés (autorisations root).

Solution

Option n°1 : obtenir des privilèges administratifs

Si ICMP n'est pas bloqué par le pare-feu du système, le problème peut être que le code ne s'exécute pas avec les autorisations suffisantes pour effectuer des opérations ICMP. Essayez d'exécuter le programme avec des privilèges administratifs.

// Windows
> runas /profile /user:administrator java -jar myapp.jar

// Unix/Linux
> sudo java -jar myapp.jar

Si ICMP est bloqué, la deuxième option consiste à utiliser TCP à la place.

Option n°2 : Activer le ping TCP

<code class="java">// This example uses the Google DNS server
String ipAddress = "173.194.32.38";
try {
    Socket socket = new Socket();
    socket.connect(new InetSocketAddress(ipAddress, 80), 5000);
    System.out.println("Host " + ipAddress + " is reachable");
} catch (IOException e) {
    System.out.println("Host " + ipAddress + " is NOT reachable");
}</code>

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