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

  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

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut


    Bon, encore du new, quoique je fasse, le serveur sera toujours en "attente" ( ce qui est normal ), ainsi je tout recommencé en passant par un tableau de boolean avec :

    indice 0--->serveur démarré, true, sinon false
    indice 1----> serveur en écoute, true sinon false
    indice 2----> client connecté, true, sinon false

    Je fixe donc indice 2 a true dans mon OnAccept, donc quand un client se connecte, cette variable se fixe bien
    mais a la sortie, elle repasse ( JE NE SAIS PAS PKOI, A FALSE )

    Donc mon petit switch case qui va tester mes états de mon serveur, ne rentre pas dans cette condition !!

    J'ai donc ensuite, crée, afin de "pousser" le vice, une variable booléen pour le statut de "client connecté, si ell est a true, un client est connecté, sinon NON.

    JE NE MANIPULE CETTE VARIABLE QU'UNE SEULE ET UNIQUE FOIS, soit dan le OnAccept, je la passe a true.

    JE teste ensuite si cette variable est a true, et NON !Meme problème, elle passe bien a true dans OnAccept, et ensuite, plus rien.

    Ca fais quand meme 4jours de débuggage la
    J'en peux plus!!

  8. #8
    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,
    sans code réduit des différentes classes en jeux on ne peut rien dire de plus..

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Voici alors le rar de mon projet, merci vraiment pour celui qui y jetera un oeil

    Dépassant les 512KO ( 1,9MO en ayant supprimés les .obj...)je vous donne un lien vers un de mes serveurs

    http://transfairre.free.fr/Manager_C...M_VARIABLE.rar

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Désolé, mon fichier rar avait mal été uploadé et était corrompu, je viens de mettre tout ca a jour, le fichier est donc intégral cette fois ci !

    Merci a tous !

    http://transfairre.free.fr/Manager_C...M_VARIABLE.rar

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    ALors pour news, donc mon OnReceive, je fixe dans ma donnée memebre m_strMessage le message recu, et idem que dans OnAccept, a la sortie de OnReceive, la variabl est écrasé !!

    Pblm avec CAsynsock ?

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