Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IO Java Discussion :

ping en Java


Sujet :

IO Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 760
    Points : 625
    Points
    625
    Par défaut ping en Java
    Bonjour,
    je dois dire que je ne connais rien en ce qui concerne la partie de l'API gerant ce type d'utilisation. J'ai parcouru la FAQ et j'ai trouvé :
    http://java.developpez.com/faq/java/...au#RESEAU_ping
    Qui me convient tout à fait mais InetAdress (et les deux sous-classes, Inet4Adress et Inet6Adress aussi en fait) ne possede pas de constructeur public.
    Comment je fais moi?

  2. #2
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Regarde les fonctions static de InetAddress ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    InetAddress inet = InetAddress.getByName(String host);
     
    boolean b = inet.isReachable(int timeout);



    P.S. Dans la FAQ il y a une erreur: InetAdress n'a qu'un N

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 760
    Points : 625
    Points
    625
    Par défaut
    En effet, j'avais effectivement cherché sur les methodes static mais je n'avais pas trouvé...
    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 760
    Points : 625
    Points
    625
    Par défaut
    Voici le code que j'ai ecris pour tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.net.InetAddress;
     
    public class Test
    {
    	public static void main(String[] arigs)
    	{
    		try
    		{
    			final String hostName = "www.google.fr";
    			final InetAddress target = InetAddress.getByName(hostName);
    			if(target!=null)
    			{
    				final boolean ping = target.isReachable(1000);
    				System.out.println(ping?"target reached":"unable to reach the target");
    			}
    			else System.out.println("false target");
    		}
    		catch(Exception e)
    		{
    			System.err.println("Pas cool! Erreur : "+e);
    			e.printStackTrace();
    			System.exit(0);
    		}
    	}
    }
    Si je teste mon "loopback"
    , il n'y a pas de problème. Néanmoins si je teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hostName="www.google.fr"
    je n'arrive pas à le joindre. Etant donné que je suis derrière un firewall, cela peut etre la raison...
    Qui veut bien tester pour moi?
    L'utilitaire ping (terminal/Linux) fonctionne parfaitement pour pinger www.google.fr, l'API est elle sensée procurer un comportement similaire necessairement?

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    octobre 2002
    Messages
    1 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2002
    Messages : 1 410
    Points : 1 966
    Points
    1 966
    Par défaut
    Si tu lis la documentation, isReachable utilise deux méthodes:

    - ICMP ECHO REQUEST si tu as le privilège de l'utiliser ou
    - TCP service ECHO (port 7).

    Mon problème est quelle méthode utilise Java? La réponse est qu'on n'en sait rien. Dans ton cas, isReachable utilise la deuxième et effectivement le port 7 de www.google.fr est fermé.

    En plus la documentation ne dit pas un mot sur le privilège à posséder pour utiliser ICMP.

    Si c'est pour tester qu'un serveur est actif sur le port 80 (HTTP), j'utiliserais la méthode HEAD avec des sockets.

    [/code]
    Bien le bonjour chez vous
    Jowo

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 760
    Points : 625
    Points
    625
    Par défaut
    Mouai... donc rien de tres convaincant comme je le pensais... J'avais effectivement lu la doc qui certes et imprecise mais vu que je ne connais pas grand chose dans ce domaine, la methode utilisée pour "pinger" n'était pas mon problème.

    Je vais creuser du coté de la" solution portable antérieure".

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2005
    Messages : 760
    Points : 625
    Points
    625
    Par défaut
    ET j'abandonne aussi celle-ci puisqu'elle utilise des JNI, fonctionnant sous windows 32 bits...

  8. #8
    Membre à l'essai
    Inscrit en
    juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    voici ce modeste code pour l'interréssé
    import java.io.*;
    import java.net.*;
    public class PseudoPing {
    public PseudoPing(){}
    //ping:
    boolean ping(String host){

    int timeOut = 3000; // I recommend 3 seconds at least int timeout = 3000 / / Je recommande 3 secondes au moins
    boolean status=false;
    try {
    status = InetAddress.getByName (host). isReachable (timeOut);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return status;
    }
    public static void main(String args[]){
    String host = "172.16.0.28"; // modifiez ce paramètre
    PseudoPing p=new PseudoPing();
    if(p.ping(host)==true)
    System.out.println("Connecté");
    }

    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ping (rapide) en java
    Par kanzarih dans le forum Débuter
    Réponses: 11
    Dernier message: 19/04/2010, 14h43
  2. ping rapide avec java
    Par ben.younes10 dans le forum Général Java
    Réponses: 5
    Dernier message: 19/04/2010, 13h32
  3. Ping en JAVA avec ICMP
    Par Shimbun dans le forum IO
    Réponses: 10
    Dernier message: 11/08/2009, 15h53
  4. ecrire le ping en java
    Par ikconde dans le forum IO
    Réponses: 1
    Dernier message: 21/03/2007, 14h15
  5. [proxy/relais de messagerie] pb de Ping avec Java
    Par tck-lt dans le forum Développement
    Réponses: 2
    Dernier message: 30/08/2005, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo