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 :

TcpClient error : cannot obtain value


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 6
    Points
    6
    Par défaut TcpClient error : cannot obtain value
    Bonjour,

    Je dois recevoir des trames de façon continue. Code VB .NET 2005

    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
     
    Private Sub TraitRecept()
     
            Try
                TcpRecept.Connect(DistantAdresse, IntPort)
            Catch ex As Exception
     
            End Try
     
            Try
                While TcpRecept.GetStream.CanRead
                    If Not TcpRecept.Connected Then Exit While
     
                    SyncLock TcpRecept.GetStream
                        Dim UserStream As New Class_ClientTcp(TcpRecept)
                        UserStream.EnregStream()
                        UserStream = Nothing
                    End SyncLock
     
                End While
     
            Catch exOverFlow As StackOverflowException
     
            Catch exArgument As ArgumentNullException
     
            Catch exSocket As Sockets.SocketException
     
            Catch ex As Exception
     
            End Try
     
            Try
                TcpRecept.Close()
            Catch ex As Exception
     
            End Try
     
            Thread.Sleep(1000)
            TraitRecept()
     
        End Sub
    La réception se fait normalement en cours de journée mais la nuit à la même période, le service s'arrête en indiquant une erreur : "error : cannot obtain value". Comment puis-je traiter l'érreur ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si tu mettais un peu de code dans tes blocs Catch (écrire la stack trace dans un log par exemple), ça te permettrait peut-être de trouver l'origine de l'erreur...

  3. #3
    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
    déjà qu'un catch vide c'est pas souvent utile
    mais des catch multiples sans traitement, c'est plutot étrange aussi
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai fait des test sur ces catches. Il y avait du code pour des vérifs.
    Je n'ai pas enlevé ces derniers pour m'orienter vers une autre solution. L'erreur n'a pas pu être traitée dans ces catches.

    J'ai rajouté un nouveau test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TcpRecept.GetStream.DataAvailable
    Je verrai demain si ça marche.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai modifié le 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
     
        Private Sub TraitRecept()
     
            Try
                If TcpRecept Is Nothing Then TcpRecept = New Sockets.TcpClient
                If Not TcpRecept.Connected Then TcpRecept.Connect(DistantAdresse, IntPort)
            Catch ex As Exception
     
            End Try
     
            If TcpRecept.Connected Then
                Try
                    While TcpRecept.GetStream.CanRead
                        If Not TcpRecept.Connected Then Exit While
     
                        SyncLock TcpRecept.GetStream
                            If TcpRecept.GetStream.DataAvailable Then
                                Dim UserStream As New Class_ClientTcp(TcpRecept)
                                UserStream.EnregStream()
                                UserStream = Nothing
                            End If
                        End SyncLock
     
                    End While
     
                Catch ex As Exception
     
                End Try
     
                Try
                    If TcpRecept.Connected Then
                        TcpRecept.Close()
                        TcpRecept = Nothing
                    End If
     
                Catch ex As Exception
     
                End Try
            End If
     
            TraitRecept()
     
        End Sub
    L'erreur "cannot obtain value" est bien gérée.
    Par contre, j'ai une consommation poussée du processeur. Peut on optimiser ce bout de code ?

    Merci d'avance

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par benefit Voir le message
    L'erreur "cannot obtain value" est bien gérée.
    Par contre, j'ai une consommation poussée du processeur. Peut on optimiser ce bout de code ?
    C'est normal, ton While boucle en permanence même s'il n'y a rien à faire... il faut que tu ajoutes un Thread.Sleep pour temporiser quand il n'y a pas de données à recevoir

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

Discussions similaires

  1. Error - Cannot find XMLScript
    Par hunzi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 07/09/2006, 15h28
  2. [Manipulations CSS] Error in parsing value for property 'top'
    Par ARRG dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/09/2006, 14h56
  3. Réponses: 2
    Dernier message: 18/07/2006, 14h46
  4. ERROR: Cannot find dialog template with IDD
    Par emardjean dans le forum MFC
    Réponses: 10
    Dernier message: 24/01/2006, 15h26
  5. [error] cannot convert parmater
    Par shirya dans le forum C++
    Réponses: 3
    Dernier message: 16/12/2005, 19h45

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