Comment implémenter votre propre méthode InetAddress.isReachable(String address, int port, int timeout) en Java ?
Publié: 2020-10-06
En Java, il existe plusieurs façons de vérifier le ping et la vérification des ports. Vous pouvez utiliser la commande ping par défaut du système, l'utilitaire InetAddress
de la méthode native de Java, HttpURLConnection
et bien d'autres.
En production ou dans votre environnement de test, si vous souhaitez effectuer plusieurs vérifications de port, disons des centaines de vérifications en même temps, il arrive parfois que la méthode InetAddress.isReachable()
n'obtienne pas la réponse correcte.
Infect dans mon cas, j'ai remarqué un échec à 100% en essayant de me connecter à www.google.com. Avez-vous l'une des questions ci-dessous ?
- java - Pourquoi InetAddress.isReachable renvoie-t-il false, alors que je peux envoyer un ping à l'adresse IP ?
- Comment vérifier si j'ai une connexion internet ?
- Exemples de code Java pour java.net.InetAddress.isReachable()
- java vérifie si l'adresse IP est accessible
- Comment tester si un système distant est joignable ?
Suivez ce tutoriel si vous souhaitez effectuer une vérification ping en utilisant HttpURLConnection.openConnection()
Dans ce didacticiel, nous allons passer en revue 2 manières différentes d'effectuer une vérification Ping :
- Méthode InetAddress.isReachable(timeout)
- La méthode
crunchifyAddressReachable(host, port, timeout)
de Crunchify qui fonctionne 100% du temps
Commençons:
- Créez la classe CrunchifyInetAddressIsReachable.java.
- Nous allons créer 2 méthodes pingCheckbyInetAddressisReachable() et pingCheckbyCrunchifyisReachable() dans lesquelles nous effectuerons ci-dessus 2 tests différents.
Quelle méthode utilisons-nous crunchifyAddressReachable() ?
Nous utilisons java.net.Socket
dans notre implémentation. La classe Socket implémente les sockets client. Avec l'aide de l'utilitaire connect()
, nous obtenons 100% du temps un résultat correct. Veuillez consulter le code ci-dessous pour plus de détails.
CrunchifyInetAddressIsReachable.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package crunchify . com . tutorial ; import java . io . IOException ; import java . net . InetAddress ; import java . net . InetSocketAddress ; import java . net . Socket ; /** * @author Crunchify.com * Problem: Sometimes InetAddress.isReachable() gives false result. * We have implemented the same Reachable check using Socket. It works almost 100% of the time. * Comparison added. * Version: 1.1 * */ public class CrunchifyInetAddressIsReachable { static String host = "www.google.com" ; public static void main ( String [ ] args ) { // check ping using default Java Utility pingCheckbyInetAddressisReachable ( ) ; // check ping using modified Crunchify Utility pingCheckbyCrunchifyisReachable ( ) ; } private static void pingCheckbyInetAddressisReachable ( ) { try { InetAddress crunchifyAddr = InetAddress . getByName ( host ) ; boolean reachable = crunchifyAddr . isReachable ( 2000 ) ; if ( reachable ) { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping successful for host: " + host ) ; } else { System . out . println ( "InetAddress.isReachable(timeout) Result ==> Ping failed for host: " + host ) ; } } catch ( Exception e ) { e . printStackTrace ( ) ; } } private static void pingCheckbyCrunchifyisReachable ( ) { try { crunchifyAddressReachable ( host , 80 , 2000 ) ; System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping successful for host: " + host ) ; } catch ( Exception e ) { System . out . println ( "\nOverloaded isReachable(host, port, timeout) Result ==> Ping failed for host: " + host ) ; } } /* * Overriding default InetAddress.isReachable() method to add 2 more arguments port and timeout value * * Address: www.google.com * port: 80 or 443 * timeout: 2000 (in milliseconds) */ private static boolean crunchifyAddressReachable ( String address , int port , int timeout ) throws IOException { Socket crunchifySocket = new Socket ( ) ; try { // Connects this socket to the server with a specified timeout value. crunchifySocket . connect ( new InetSocketAddress ( address , port ) , timeout ) ; // Return true if connection successful return true ; } catch ( IOException exception ) { exception . printStackTrace ( ) ; // Return false if connection fails return false ; } finally { crunchifySocket . close ( ) ; } } } |
Une fois que vous avez copié le code dans l'environnement Eclipse, exécutez-le simplement en tant qu'application Java pour voir le résultat ci-dessous.

Sortie console :
1 2 3 |
InetAddress . isReachable ( 2000 ) Result == > Ping failed for host : www . google . com Overloaded isReachable ( host , port , timeout ) Result == > Ping successful for host : www . google . com |