IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C# Discussion :

Ping d'un hostname très long en cas d'échec


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Ping d'un hostname très long en cas d'échec
    Bonjour à tous, et très bonne année 2019 !

    Je me permet de venir poser ma question ici, car je n'arrive pas à trouver de solution adéquate, pour un soucis pourtant simple...

    Mon application contient une textbox dans laquelle un hostname ou une ip doit être rentrée. Si le poste répond au ping, alors plusieurs informations sont "peuplées" dans l'interface, et des menus deviennent accessible. Dans le cas contraire, et bien il est juste affiché que le poste est hors ligne. Seulement, si le poste ne répond pas, le retour du ping met trop longtemp à parvenir à l'application.

    Comment faire pour avoir un retour très rapide, même en cas d'échec de ping ?

    J'ai essayé plusieurs choses. Déjà ceci :
    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
    26
    27
            public static bool GetPing(string hostname)
            {
                bool pingable = false;
     
                try
                {
                    Ping pingSender = new Ping();
                    PingOptions options = new PingOptions();
                    options.DontFragment = true;
                    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                    byte[] buffer = Encoding.ASCII.GetBytes(data);
                    int timeout = 120;
     
                    PingReply reply = pingSender.Send(hostname, timeout, buffer, options);
                    if (reply.Status == IPStatus.Success)
                    {
                        pingable = true;
                    }
                }
                catch (Exception ex)
                {
                    pingable = false;
                    Console.WriteLine(ex.Message);
                }
     
                return pingable;
            }
    Mais également malgré tout en multithreading pour éviter un blocage de l'appli :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public static bool GetPing(string hostname)
            {
                if (hostname == null || hostname == string.Empty)
                {
                    return false;
                }
     
                bool pingable = false;
     
                try
                {
                    Func<PingReply> pingDelegate = () => new Ping().Send(hostname);
                    IAsyncResult result = pingDelegate.BeginInvoke(r => pingDelegate.EndInvoke(r), null);
     
                    result.AsyncWaitHandle.WaitOne(100);
                    pingable = result.IsCompleted;
                }
                catch (FormatException fe)
                {
                    Console.WriteLine("FormatException" + fe.Message);
                    return false;
                }
                catch (SocketException se)
                {
                    Console.WriteLine("PingException" + se.Message);
                    return false;
                }
                catch (NotSupportedException nse)
                {
                    Console.WriteLine("NotSupportedException" + nse.Message);
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception" + e.Message);
                    return false;
                }
                return pingable;
            }
    Ce dernier bout de code fonctionne, et me retourne un résultat rapidement, même en cas d'echec, mais quelque secondes plus tard, VisualStudio m'indique une Exception non gérée "SocketException : Unknown host", alors que je gère toutes les exceptions... En fait, j'ai l'impression que malgré le résultat qui m'est retourné (ping ok ou pas), et bien le ping continue en arrière plan.

    Pour finir, j'ai l'impression que le retour est très long uniquement en cas d'utilisation de nom d'hôte, mais afin de la convertir en ip, j'ai besoin d'effectué un ping dessus... Un cercle vicieux

    Quelqu'un peut m'orienter svp ?

    Merci bcp par avance.

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Bonjour

    Qu'appelles tu délai très long ?

    si je vois le timeout ci=après c'est 2 minutes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int timeout = 120;
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

Discussions similaires

  1. [WIFI] Signal excellent mais ping très long
    Par Mut dans le forum Hardware
    Réponses: 1
    Dernier message: 06/01/2008, 14h11
  2. Demarage des programmes très long
    Par venegan dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 02/03/2006, 17h50
  3. Démarrage de windows vraiment très long
    Par krfa1 dans le forum Windows XP
    Réponses: 16
    Dernier message: 23/10/2005, 13h37
  4. delete très long
    Par slefevre01 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/10/2005, 14h16
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 23h18

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