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

VB.NET Discussion :

Pinger une liste d'IP. Quelle methode rapide ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Par défaut Pinger une liste d'IP. Quelle methode rapide ?
    Bonjour je voudrais pinger une liste d'IP sur un reseau local.
    J'y arrive avec la méthode suivante avec un BackgroundWorker mais le resultat est très lent (environ 50 secondes pour pinger 26 IP)


    J'ai volontairement limité le ping à 4 ip cet exemple:
    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
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    Imports System.Net
    Imports System.Net.NetworkInformation
    Imports System.Threading
    Imports System.Text
     
    Public Class pinger
     
        Dim ping As New Ping
        Dim rp(3) As PingReply
     
        Private Sub NsButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NsButton1.Click
     
            Try
     
                BackgroundWorker1.RunWorkerAsync()
     
                Label163.Text = "Test ping en cours, veuillez patienter..."
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
        Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
            Try
                rp(0) = ping.Send("10.252.0.29")
                rp(1) = ping.Send("10.252.0.38")
                rp(2) = ping.Send("10.252.0.39")
                rp(3) = ping.Send("10.252.0.41")
            Catch ex As Exception
     
            End Try
     
        End Sub
     
     
        Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
     
            Label163.Text = "Test ping terminé."
     
            If rp(0).Status = IPStatus.Success Then
     
     
                Label1.Text = rp(0).RoundtripTime & " ms"
                Label2.Text = "Connecté"
                Label1.ForeColor = Color.Lime
                Label2.ForeColor = Color.Lime
     
            Else
                Label1.Text = rp(0).RoundtripTime & " ms"
                Label2.Text = "Déconnecté"
                Label1.ForeColor = Color.Red
                Label2.ForeColor = Color.Red
     
            End If
     
            If rp(1).Status = IPStatus.Success Then
     
                Label4.Text = rp(1).RoundtripTime & " ms"
                Label3.Text = "Connecté"
                Label4.ForeColor = Color.Lime
                Label3.ForeColor = Color.Lime
     
            Else
                Label4.Text = rp(1).RoundtripTime & " ms"
                Label3.Text = "Déconnecté"
                Label4.ForeColor = Color.Red
                Label3.ForeColor = Color.Red
     
            End If
     
            If rp(2).Status = IPStatus.Success Then
     
                Label6.Text = rp(2).RoundtripTime & " ms"
                Label5.Text = "Connecté"
                Label6.ForeColor = Color.Lime
                Label5.ForeColor = Color.Lime
     
            Else
                Label6.Text = rp(2).RoundtripTime & " ms"
                Label5.Text = "Déconnecté"
                Label6.ForeColor = Color.Red
                Label5.ForeColor = Color.Red
     
            End If
     
            If rp(3).Status = IPStatus.Success Then
     
                Label8.Text = rp(3).RoundtripTime & " ms"
                Label7.Text = "Connecté"
                Label8.ForeColor = Color.Lime
                Label7.ForeColor = Color.Lime
     
            Else
                Label8.Text = rp(3).RoundtripTime & " ms"
                Label7.Text = "Déconnecté"
                Label8.ForeColor = Color.Red
                Label7.ForeColor = Color.Red
     
            End If
     
        End Sub
     
    End Class
    Merci de votre aide

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    tu fais un list(of string)
    tu mets toutes les ips dedans
    et après un for each sur la list pour démarrer un thread sur une méthode qui fait le ping
    donc tous les ping vont être fait en même temps plutot que chacun leur tour
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,
    Télécharge les sources de CE PROJET et teste la vitesse...
    (sources en vb et en csharp)

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    On peut aussi utiliser les methodes SendPingAsync et SendAsyncCancel de la classe Ping et l'event PingCompleted.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Citation Envoyé par Graffito Voir le message
    On peut aussi utiliser les methodes SendPingAsync et SendAsyncCancel de la classe Ping et l'event PingCompleted.
    Bonjour Graffito,
    Ça fait des années que je cherche un moyen efficace et rapide, je l'ai trouvé hier ICI teste-le et tu me diras comment tu l'as trouvé...

    Franchement je n'ai pas eu le temps d'analyser le code... mais le résultat est à la hauteur.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Par défaut
    ok j'ai donc suivit les conseils de Pol63.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Imports System.Net
    Imports System.Net.NetworkInformation
    Imports System.Threading
    Imports System.Text
     
    Public Class pinger
     
            Dim ping As New Ping
            Dim reply As PingReply
     
        Private Sub NsButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NsButton1.Click
     
            Try
     
                BackgroundWorker1.RunWorkerAsync()
     
                Label163.Text = "Test ping en cours, veuillez patienter..."
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
        Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
            Try
     
                Dim serveurs As New List(Of String)()
     
                serveurs.Add("10.252.0.29")
                serveurs.Add("10.252.0.38")
                serveurs.Add("10.252.0.39")
                serveurs.Add("10.252.0.41")
     
                For Each serveur As String In serveurs
     
                    ping.Send(serveur)
     
                Next
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
        Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
     
            Label163.Text = "Test ping terminé."
     
        End Sub
     
    End Class
    Mais je ne sais pas trop comment m'y prendre pour utiliser PingReply avec les labels que j'ai associé à chaque IP

    si j'essaie ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
              If reply(serveur).Status = IPStatus.Success Then
     
                        Label1.Text = reply.RoundtripTime & " ms"
                        Label2.Text = "Connecté"
                        Label1.ForeColor = Color.Lime
                        Label2.ForeColor = Color.Lime
     
                    Else
                        Label1.Text = reply.RoundtripTime & " ms"
                        Label2.Text = "Déconnecté"
                        Label1.ForeColor = Color.Red
                        Label2.ForeColor = Color.Red
     
                    End If
    J'obtiens une erreur sur reply...

    Merci ACIVE_CS pour la source mais cela ping une plage d'ips ce n'est pas vraiment ce que recherche

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2008, 16h07
  2. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 10h41
  3. Réponses: 2
    Dernier message: 08/09/2006, 09h00
  4. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  5. [Regex][Avis] Méthode de suppression d'une liste de mots
    Par manal dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 15/10/2005, 00h39

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