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

MFC Discussion :

Socket avec AsyncSock, perte de variable :(


Sujet :

MFC

Vue hybride

Nixeus Socket avec AsyncSock, perte... 26/04/2007, 18h33
farscape salut, a mon avis il est... 26/04/2007, 20h02
Nixeus EN réalité, j'ai déja pensé a... 26/04/2007, 22h55
farscape mais tu ne vérifies pas ma ... 27/04/2007, 06h49
Nixeus Oui, tu as raison, ... 27/04/2007, 09h56
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Socket avec AsyncSock, perte de variable :(
    Bonjour tout le monde !


    Après plus de 6h de débuggage pour quelquechose d'incompréhensible, je viens demander votre avis.
    Je developpe une MFC, avec socket ( utilisant AsyncSock)

    Ma partie client serveur fonctionne sans aucun problème.

    J'ai créer donc une classe CSocketServeur héritée de CAsynsock.
    Dans cette classe j'y ai créer une donnée membre m_nStatut (un int)

    Je fixe m_nStatut à 0 si le serveur n'est pas démarré
    à 1 si le serveur est démarré ( en écoute)
    à 2 si le serveur a un client de connecté

    Ainsi je fixe m_nStatut dans mon code.
    ( j'ai créer une méthode SetStatut(int statut) et une méthode int GetStatut() )

    J'ai mis sur ma MFC un timer, afin de vérifier toutes les 2 secondes, l'état de mon serveur à l'aide de GetStatut()

    Un petit switch case, je teste la valeur retournée par GetStatut, et hop, j'y affiche un joli BMP afin de visualiser l'état du serveur.

    Tous fonctionne pour l'état 0, et 1 ( Non démarré, et en écoute).
    J'ai donc débuggé pour voir ou la faille se trouve.
    Quand un client se connecte, je passe bien dans mon CSocketServeur::OnAccept()
    et je fixe bien dans cette méthode m_nStatut à 2 ( vérifié au Debuggeur ! )

    Quand le débugger sors de la méthode CSocketServeur::OnAccept, ma variable m_nStatut se retrouve à sa valeur précédente.

    Mon code est de plus CLEAN car c'est un projet perso pour mes cours !

    Plus de 6 h de debug, je deviens fou !

    Quelqu'un connais ce genre de problème?
    MERCI vraiment à tout le monde !!!

    Bonne journée

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    a mon avis il est possible que ce ne soit pas le meme objet socket ...
    dans le debugger regarde l'adresse de l'objet socket quand tu fixes la variable
    et quand tu la lis ..
    c'est la même adresse (valeur de this).?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    EN réalité, j'ai déja pensé a cet erreure potentiel, donc pour ce faire, au lieu de débuggé, j'ai éssayé, pour fixer mon m_nStatut à 2, de faire : (dans le OnAccept)

    m_nStatut=2 et également this->SetStatut(2)

    Ces deux méthodes ne changent aparemment rien

    Tous mes debug me montrent que dans le OnAccept, la variable se fixe bien a 2 mais que quand on sors du OnAccept, elle est remise a sa valeur précédent ( si elle avais une valeur précédente), sinon, elle est mise a 14252562 ( une valeur du genre )

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Nixeus
    EN réalité, j'ai déja pensé a cet erreure potentiel, donc pour ce faire, au lieu de débuggé, j'ai éssayé, pour fixer mon m_nStatut à 2, de faire : (dans le OnAccept)

    m_nStatut=2 et également this->SetStatut(2)

    Ces deux méthodes ne changent aparemment rien

    Tous mes debug me montrent que dans le OnAccept, la variable se fixe bien a 2 mais que quand on sors du OnAccept, elle est remise a sa valeur précédent ( si elle avais une valeur précédente), sinon, elle est mise a 14252562 ( une valeur du genre )
    mais tu ne vérifies pas ma supposition...
    la dernière valeur correspond soit a un débordement mémoire soit vraiment parce que c'est un autre objet, surtout si cette variable n'est pas initialisée dans le constructeur...
    c'est le cas ?

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Oui, tu as raison,


    J'initialise ma variable m_nStatut à 0 dans mon constructeur ( 0= Serveur non démarrer).

    Si je lance mon serveur, (démarrage de l'écoute), la variable passe a 1 et y reste.

    Quand un client se connecte, elle passe a 2 dans le OnAccept,et a la sortie du OnAccept, elle repasse a sa valeur "précédente" donc 1 si javais démarré le serveur, 0 si je n'avais pas démarré le serveur, et une valeur du genre 142542792 si je n'initialise pas cette variable dans mon constructeur.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    J'ai du nouveau !!!!
    Grace à Seandest, merci !!

    En fait, quand un client viens se connecter, le serveur se remetrais tout de suite en écoute, c'est pour ca que ma variable change de valeur !

    DONC, DEUX solutions s'offrent à moi, la premiere serai de "forcer" mon serveur en MONO CLIENT, ce qui n'ai absolument pas génant car 1 seul client s'y connectera, mais je ne sais pas comment faire pour le forcer en mono client !

    Deuxieme solution, le laisser en multiclient, et dans ce cas trouver, pour que ma variable ne soit pas remodifié lorsqu'un elle se Re-met en écoute, et lorsque mon client est connecté !

    Savez vous comment faire ? Merci

Discussions similaires

  1. [Toutes versions] Interaction avec Internet Explorer --> perte de variable IE
    Par damsmut dans le forum Microsoft Office
    Réponses: 0
    Dernier message: 26/01/2014, 16h13
  2. Perte de variables de session avec lien href
    Par didjac dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2009, 16h12
  3. Perte de variables session avec IE6.0.28
    Par tom42 dans le forum Langage
    Réponses: 1
    Dernier message: 12/03/2007, 17h43
  4. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 14h24
  5. Erreur de socket avec le composant Indy idHTTP
    Par Etanne dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/10/2004, 11h27

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