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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    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 sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 averti
    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
    Points : 359
    Points
    359
    Par défaut
    Bonjour,
    Télécharge les sources de CE PROJET et teste la vitesse...
    (sources en vb et en csharp)
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  4. #4
    Expert éminent 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
    Points : 7 903
    Points
    7 903
    Par défaut
    On peut aussi utiliser les methodes SendPingAsync et SendAsyncCancel de la classe Ping et l'event PingCompleted.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre averti
    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
    Points : 359
    Points
    359
    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.
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    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

  7. #7
    Membre averti
    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
    Points : 359
    Points
    359
    Par défaut
    Re:

    Pinger une liste d'IP
    J'ai du mal comprendre la question alors... mais moi aussi je préfère la plage...
    Ceci-dit rien n'empêche de "pinger" une seule IP, et la on est plus à la plage

    Mais bon, ce que tu cherches à faire c'est plutôt du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Dim serveurs As New List(Of String)()
            serveurs.Add("10.252.0.29")
            serveurs.Add("10.45.0.38")
            serveurs.Add("10.252.0.39")
            serveurs.Add("10.252.0.48")
            For Each serveur As String In serveurs
                If My.Computer.Network.Ping(serveur) Then
                    MsgBox("Server OK")
                Else
                    MsgBox("Ping PAS OK")
                End If
            Next
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    Oui c'est ca
    J'ai deux label par IP, je voudrais que l'un affiche la latence et l'autre affiche "Connecté" ou Déconnecté" en fonction de la réponse au ping.
    Ma question est de savoir comment lier ces labels avec le resultat du ping de chaque ip dans ton exemple.

  9. #9
    Membre averti
    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
    Points : 359
    Points
    359
    Par défaut
    Tu ne peux pas utiliser des 'Label' car on ne connait pas le nombre de ip à 'pinger'
    A moins de les ajouter dynamiquement à chaque ping, mais alors... que se passera-t-il quand l'utilisateur voudra 'pinger' 255 Ip's ? on les mettra où les labels?
    Pourquoi pas utiliser un listbox?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim Liste As New ListBox
            Me.Controls.Add(Liste)
     
            For Each serveur As String In serveurs
                If My.Computer.Network.Ping(serveur) Then
                    Liste.Items.Add(serveur & " - Connecté")
                Else
                    Liste.Items.Add(serveur & " - Déconnecté")
                End If
            Next
    A noter que cette méthode nécessite environ une seconde de traitement à chaque ping
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Si tes requêtes ping te servent seulement à savoir ou non si tes ip sont présentes sur le réseau, la requête arp pourrait t'être utile.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    ok j'ai récrit completement le code et viré le backgroundworker. J'ai aussi placé une listbox (Listbox1) là ou voulais sur la form

    Mais j'obtiens une erreur NullReferenceExeption dans Network Control 1.0

    Peux tu m'aider ?

    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
    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
     
                Dim serveurs As New List(Of String)()
     
                serveurs.Add("10.252.0.29")
                serveurs.Add("10.45.0.38")
                serveurs.Add("10.252.0.39")
                serveurs.Add("10.252.0.48")
     
                For Each serveur As String In serveurs
     
                    ping.Send(serveur)
     
                    If My.Computer.Network.Ping(serveur) Then
     
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Connecté")
     
                    Else
     
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Déconnecté")
     
                    End If
     
                Next
     
                Label163.Text = "Test ping terminé."
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
    End Class

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Enlève les parenthèses après ta déclaration de liste de string

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    Ok merci
    Finalement ca marche avec quelques mofifs
    Existe t'il un moyen de donner une couleur aux items de la lisbox en fonction du résultat ?

    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
    Imports System.Net.NetworkInformation
    Imports System.Threading
    Imports System.Text
     
    Public Class pinger
     
        Private Sub NsButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NsButton1.Click
     
            Try
     
                Dim serveurs As New List(Of String)
     
                serveurs.Add("10.252.0.29")
                serveurs.Add("10.45.0.38")
                serveurs.Add("10.252.0.39")
                serveurs.Add("10.252.0.48")
     
                For Each serveur As String In serveurs
     
                    Dim ping As New Ping
     
                    Dim reply As PingReply = Ping.Send(serveur)
     
                    If reply.Status = IPStatus.Success Then
     
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Connecté")
     
                    Else
     
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Déconnecté")
     
                    End If
     
                Next
     
                Label163.Text = "Test ping terminé."
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
    End Class

  14. #14
    Membre averti
    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
    Points : 359
    Points
    359
    Par défaut
    Ou:
    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
     Dim Result As Net.NetworkInformation.PingReply
            Dim SendPing As New Net.NetworkInformation.Ping
            Dim ResponseTime As Long
            Dim serveurs As New List(Of String)()
            serveurs.Add("10.252.0.29")
            serveurs.Add("192.168.1.254")
            serveurs.Add("192.168.1.14")
            serveurs.Add("10.252.0.48")
     
            Try
                For Each serveur As String In serveurs
                    Result = SendPing.Send(serveur)
                    ResponseTime = Result.RoundtripTime
                    If Result.Status = Net.NetworkInformation.IPStatus.Success Then
                        ListBox1.Items.Add(serveur & " - " & ResponseTime.ToString & "ms - Connecté")
                    Else
                        ListBox1.Items.Add(serveur & " - Déconnecté")
                    End If
                Next
            Catch ex As Exception
            End Try
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    Merci ton code me va très bien.
    Pour ce qui est de la couleur des items j'ai regardé du côté de listbox.drawmode mais c'a m'a l'air bien compliqué dans mon cas.
    j'ai aussi besoin de regler la hauteur des items dans la listbox (ItemHeight) et on ne peut que le faire qu'en selectionant OwnerDrawFixed dans le DrawMode.
    Mais si je le fait les items deviennent invisibles...

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Citation Envoyé par stevensavior Voir le message
    Existe t'il un moyen de donner une couleur aux items de la lisbox en fonction du résultat ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Listbox1_DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs) Handles Listbox1.DrawItem
            Dim BackColor As Color = If(DirectCast(Listbox1.Items(e.Index), String).Contains("msConnecté"), Color.LightGreen, If(DirectCast(Listbox1.Items(e.Index), String).Contains("msDéconnecté"), Color.Red, Color.White))
            e.Graphics.FillRectangle(New SolidBrush(BackColor), e.Bounds)
            e.Graphics.DrawString(DirectCast(Listbox1.Items(e.Index), String), Listbox1.Font, New SolidBrush(Listbox1.ForeColor), e.Bounds.Left + 1, e.Bounds.Top + 1)
        End Sub
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    Niquel ca marche merci de votre aide.

    Par contre le ping est très long si les certaines ip de répondent pas
    Si je ping 3 ips dont 1 seule repond cela prends 25 secondes
    Il n'y aurait pas un moyen de mettre un timeout si une ip ne répond pas ?

  18. #18
    Membre averti
    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
    Points : 359
    Points
    359
    Par défaut
    Par contre le ping est très long si les certaines ip de répondent pas
    Si je ping 3 ips dont 1 seule repond cela prends 25 secondes
    Il n'y aurait pas un moyen de mettre un timeout si une ip ne répond pas ?
    Ahh... nous y voilà !...
    J'attendais ce moment avec impatience

    Je rappelle la question : "Pinger une liste d'IP. Quelle methode rapide ?"
    C'est peu-être pour ça que je t'ai mis un lien tout au début, car si l'on teste on verra qu'il fait le ping de 255 IP's en 4/5 secondes (même moi j'étais étonné)

    J'ai pas eu le temps de "décortiquer" le code mais il est très bien fait.



    Citation Envoyé par rv26t Voir le message
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Listbox1_DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs) Handles Listbox1.DrawItem
            Dim BackColor As Color = If(DirectCast(Listbox1.Items(e.Index), String).Contains("msConnecté"), Color.LightGreen, If(DirectCast(Listbox1.Items(e.Index), String).Contains("msDéconnecté"), Color.Red, Color.White))
            e.Graphics.FillRectangle(New SolidBrush(BackColor), e.Bounds)
            e.Graphics.DrawString(DirectCast(Listbox1.Items(e.Index), String), Listbox1.Font, New SolidBrush(Listbox1.ForeColor), e.Bounds.Left + 1, e.Bounds.Top + 1)
        End Sub
    Oui... à condition de passer le 'DrawMode' de la 'listbox' en 'OwnerDrawFixed'
    Et le 'Contains("msConnecté"' ou "msDéconnecté" doivent bien exister dans la liste
    je dirais plutôt Contains("Connecté" et Contains("Déconnecté" puisque il fait la différence de case
    Par nature les mots, ils sont flous, c'est une fois alignés qu'ils se précisent.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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
    Points : 26
    Points
    26
    Par défaut
    Oui j'ai regardé cette source mais elle est bien trop complexe pour moi.
    Je suis sur qu'il existe une méthode pour interrompre le ping d'une ip si elle ne répond pas en en temps donné


    Edit

    Après ajout d'un timeout de 1 seconde je descend a 30 secondes pour pinger 25 ip. C'est pas le top mais c'est déja mieux.
    Je n'ai mis que 4 ip dans 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
    Imports System.Net.NetworkInformation
    Imports System.Threading
    Imports System.Text
     
    Public Class pinger
     
        Private Sub Listbox1_DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs) Handles Listbox1.DrawItem
            Dim BackColor As Color = If(DirectCast(Listbox1.Items(e.Index), String).Contains("Connecté"), Color.Green, If(DirectCast(Listbox1.Items(e.Index), String).Contains("Déconnecté"), Color.Red, Color.Red))
            e.Graphics.FillRectangle(New SolidBrush(BackColor), e.Bounds)
            e.Graphics.DrawString(DirectCast(Listbox1.Items(e.Index), String), Listbox1.Font, New SolidBrush(Listbox1.ForeColor), e.Bounds.Left + 1, e.Bounds.Top + 1)
        End Sub
     
        Private Sub NsButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NsButton1.Click
     
            Listbox1.Items.Clear()
     
     
            Dim SendPing As New Net.NetworkInformation.Ping
            Dim ResponseTime As Long
     
     
            ' Create a buffer of 32 bytes of data to be transmitted.
            Dim data As String = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            Dim buffer As Byte() = Encoding.ASCII.GetBytes(data)
     
            ' Wait 1 second for a reply.
            Dim timeout As Integer = 1000
     
            ' Set options for transmission:
            ' The data can go through 64 gateways or routers
            ' before it is destroyed, and the data packet
            ' cannot be fragmented.
            Dim options As New PingOptions(64, True)
     
            Dim Result As Net.NetworkInformation.PingReply
     
            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")
     
            Try
     
                If NsProgressBar1.Value = NsProgressBar1.Maximum Then
     
                End If
                NsProgressBar1.Minimum = 0
                NsProgressBar1.Maximum = 100
     
                Dim i As Integer
                For i = 0 To 100
                    NsProgressBar1.Value = i
                    Application.DoEvents()
                    System.Threading.Thread.Sleep(25)
                    Label164.Text = NsProgressBar1.Value.ToString() + "%"
                Next
     
                For Each serveur As String In serveurs
                    Result = SendPing.Send(serveur, timeout, buffer, options)
                    ResponseTime = Result.RoundtripTime
     
                    If Result.Status = Net.NetworkInformation.IPStatus.Success Then
                        Listbox1.Items.Add("Connecté       " & ResponseTime.ToString & "ms")
                    Else
                        Listbox1.Items.Add("Déconnecté")
                    End If
                Next
     
            Catch ex As Exception
     
            End Try
     
        End Sub
     
    End Class

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par ACIVE_CS Voir le message
    Et le 'Contains("msConnecté"' ou "msDéconnecté" doivent bien exister dans la liste
    J'avais repris ce qu'il a mis
    Citation Envoyé par stevensavior Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    If reply.Status = IPStatus.Success Then
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Connecté")
                    Else
                        Listbox1.Items.Add(reply.RoundtripTime & " ms" & "Déconnecté")
                    End If
    donc ils existent.

    Citation Envoyé par ACIVE_CS Voir le message
    je dirais plutôt Contains("Connecté" et Contains("Déconnecté" puisque il fait la différence de case
    Mais puisque c'est en fin de chaîne EndsWith("Connecté"), et EndsWith("Déconnecté"). (on évite la boucle de recherche)

    [Edit]Si c'est au début StartsWith (pour info suite au changement de place de la chaîne fait dans le post suivant)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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