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 :

Pourquoi un try catch ne marche-t-il pas ?!?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Par défaut Pourquoi un try catch ne marche-t-il pas ?!?
    Bonjour à tous,
    je me remets après un long passage à vide au basic ... et ai un probleme dans le code ci-dessous.
    Le principe : pour tester une connection ADSL envoyer un ping et, si il marche en déduire que la liaison est ok, sinon pinguer une deuxième et, si besoin une troisième avant de déduire que la connexion est HS.
    Le problème : quel que soit le résultat du ping (je deconnecte le pc par exemple), je ne catch jamais d'erreur!!
    Help, help ..
    Merci d'avance
    Eric

    Code :
    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
     
    Imports System
    Imports System.Threading
    Module pingctrlerreur
     
        Sub Main(ByVal cmdArgs() As String)
            Dim millisecondsTimeout As Integer
            Dim Connecte As Boolean
            Dim nouveaunom, vrainouveaunom As String
            Dim AdressesPing(3) As String
            Dim IpAddr As String
            Dim Ping As New Net.NetworkInformation.Ping
            Dim PingReply As Net.NetworkInformation.PingReply
            millisecondsTimeout = 30000
            Connecte = False
            If My.Computer.FileSystem.FileExists("test.txt") Then
                nouveaunom = "C" & DateString & TimeString & ".txt"
                vrainouveaunom = Replace(nouveaunom, ":", "")
                My.Computer.FileSystem.RenameFile("test.txt", vrainouveaunom)
            End If
            If cmdArgs.Length > 0 Then
                For argNum As Integer = 0 To UBound(cmdArgs, 1)
                    AdressesPing(argNum) = cmdArgs(argNum)
                Next argNum
            Else
                AdressesPing(0) = "194.2.0.50"
                AdressesPing(1) = "194.2.0.50"
                AdressesPing(2) = "194.2.0.50"
            End If
            My.Computer.FileSystem.WriteAllText("C:test.txt", _
            "PING sur " & AdressesPing(0) & " " & AdressesPing(1) & " " & AdressesPing(2) & " " & " le " & DateString & " " & " à " & TimeString & Chr(13), True)
            While True
                Try
                    ' On envoit la requete du ping
                    IpAddr = AdressesPing(0)
                    PingReply = Ping.Send(IpAddr)
                    ' si la connection est déjà connue, on ne fait rien sinon on la note dans le fichier
                    If Not Connecte Then
                        Connecte = True
                        My.Computer.FileSystem.WriteAllText("C:test.txt", "C" & "," & "1," & AdressesPing(0) & "," & DateString & "," & TimeString & Chr(13), True)
                    End If
                Catch ex As Exception
                    ' En cas d'erreur ping deuxieme IP
                    Try
                        ' On envoit la requete du ping
                        IpAddr = AdressesPing(1)
                        PingReply = Ping.Send(IpAddr)
                        ' On affiche le résultat du ping
                        ' tant que ça marche, on ne fait rien
                        ' si le ping ne marche pas le catch ex as exception doit prendre le controle
                    Catch ex1 As Exception
                        ' En cas d'erreur sur deuxieme IP ping troisieme IP
                        Try
                            ' On envoit la requete du ping
                            IpAddr = AdressesPing(2)
                            PingReply = Ping.Send(IpAddr)
                            ' On affiche le résultat du ping
                            ' tant que ça marche, on ne fait rien
                            ' si le ping ne marche pas le catch ex as exception doit prendre le controle
                        Catch ex2 As Exception
                            ' En cas d'erreur sur la troisième IP : 
                            ' si la deconnection est déjà connue on ne fait rien sinon 
                            ' on écrit la deconnection dans le fichier
                            ' et on note la déconnection
                            Connecte = False
                            My.Computer.FileSystem.WriteAllText("C:test.txt", "D,,," & DateString & " " & TimeString & Chr(13), True)
                        End Try
                    End Try
                End Try
     
                ' Pause de 15 seconde entre chaque ping
                System.Threading.Thread.Sleep(1000)
            End While
        End Sub
     
    End Module

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    Personnellement je trouve cela un peu bourrin de mettre trois try catch imbriqué dans un while, d'autant plus que si la connection existe, tu n'en sortiras jamais.
    Bref, ne serait-il pas mieux de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private function test_connection (byval ip as string)
    try
    return ping.send(ip)
    catch ex as exception
    return 0
    end try
    end function
    puis dans ton main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i as integer = 0 to 2
       if test_connection = 0 then
       My.Computer.FileSystem.WriteAllText("C:test.txt", "D,,," & DateString & " " & TimeString & Chr(13), True)
       else
    My.Computer.FileSystem.WriteAllText("C:test.txt", "C" & "," & "1," & AdressesPing(0) & "," & DateString & "," & TimeString & Chr(13), True)
    next

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    ( juste en passant ... )

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Par défaut Try/catch ne marchent pas
    Je ne sais pas si c'est bourrin (lol) mais tu ne réponds pas à ma question!?
    Pourquoi ce catch ne marche pas!?
    Je pingue plusieurs IP parce que je pense qu'il ne suffit pas qu'une seule IP ne réponde pas pour en conclure qu'ADSL est out, ce peut être le site pingué qui est hs ?
    Merci de ton aide

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    Il y a une chose que je ne comprends pas
    tu veut tester trois fois la connection
    mais tu nous met ça dans un while dont on ne sors jamais si il n'y a pas de connection (véridique j'ai tester)
    Parce que tes try catch marchent

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Il me semble curieux que la variable PingReply ne soit pas testée. Si tu fais un ping, et que celui ci ne fonctionne pas correctement il y a des chances que le reply.Status ne soit pas à IPStatus.Success or tu ne le teste pas!.

    Cordialement
    Soazig

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2015, 17h20
  2. Réponses: 6
    Dernier message: 27/10/2010, 14h06
  3. Try Catch en Qt : Comment ca marche ?
    Par FBRUGEL dans le forum Qt
    Réponses: 1
    Dernier message: 23/09/2009, 14h24
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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