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 :

fermer proprement une connection avant de fermer un thread


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2004
    Messages : 58
    Par défaut fermer proprement une connection avant de fermer un thread
    Salut Tout le monde.

    J'ai un client VB.NET qui communique avec une serveur écrit en C.

    Côté client, je crée un thread qui va gérer la connexion, tout se passe bien, le serveur et le client communiquent.

    Le problème arrive qd je ferme la connexion du client. J'ai une erreur côté serveur qui me dit client unexpectidly close connexion.

    Comme vous le savez sûrement, la fermeture d'une connection tcp se fait en plusieurs étapes:


    Or si je regarde avec wireshark, je vois que mon client ferme la socket avant que la connexion soit fermée proprement:
    J'envoie le FIN, le serveur m'envoie son ACK, puis lorsque le serveur me renvoie son FIN, je renvoie un RST car la socket n'existe plus. d'où erreur.

    voici comment je ferme ma socket:
    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
     
    Private mmClient As TcpClient
     
    Try
          If Not mmClient Is Nothing Then
            mmClient.GetStream.Close()
            mmClient.Close()
            mmClient = Nothing
          End If
    Catch ex As Exception
          ExceptionHandling.GlobalExceptionHandler(ex)
     
        Finally
          Connection1_OK = False
          mmClient = Nothing
     
    End Try
    Une fois sorti de cette fonction, le thread de comm va sortir de sa boucle car Connection1_OK = False et s'arrêter

    Ce que je suspecte, c'est que le thread s'arrête avant que la connexion soit complètement fermée (reçu et acquité le FIN du serveur)

    Quelqun saurait-il comment tester que la connection est proprement fermée avant de sortir du thread?

    merci par avance

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2004
    Messages : 58
    Par défaut
    Bon, j'ai trouvé tout seul, en fait,la ligne qui n'est pas top, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mmClient.GetStream.Close()
    ce qu'il faut écrire c'est:
    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
     
    sub fermerConnection(mmClient as Tcplient)
    Dim ns As NetworkStream 
     
    Try
     
          If Not mmClient Is Nothing Then
            ns = mmClient.GetStream()
            ns.Close()
            mmClient.Close()
            mmClient = Nothing
          End If
     
    Catch ex As Exception
          ExceptionHandling.GlobalExceptionHandler(ex)
     
        Finally
          Connection1_OK = False
          mmClient = Nothing
     
    End Try
    il faut donc d'abord récupérer le flux avec un handle
    puis le fermer via ce dernier

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

Discussions similaires

  1. fermer proprement une appli
    Par laclac dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 07/10/2009, 21h33
  2. Réponses: 1
    Dernier message: 18/02/2009, 17h39
  3. Comment fermer proprement une fenetre?
    Par dams95190 dans le forum VBA Access
    Réponses: 13
    Dernier message: 12/10/2007, 13h45
  4. [HttpSession] Fermer proprement une session
    Par ohyes_ dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 20/07/2006, 15h33
  5. [wxPython][wxFrame]Comment fermer proprement une frame ?
    Par Screameur dans le forum wxPython
    Réponses: 4
    Dernier message: 12/05/2005, 19h49

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