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 :

[MFC]Serveur Multithread + CSocket: ASSERT dans sockcore.cpp


Sujet :

MFC

  1. #1
    Membre � l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par d�faut [MFC]Serveur Multithread + CSocket: ASSERT dans sockcore.cpp
    Voila je d�veloppe un petit serveur sous visual, le principe est simple:
    J'ai un CSocket "listener" qui �coute un port fixe auquel les clients se connectent.
    Quand ils se connectent (message OnAccept), je cr�e un nouveau CSocket, je l'active avec le pr�c�dent et je le d�tache du thread courant. Je cr�e alors un nouveau thread dans lequel j'attache ce CSocket, et dans lequel je capture les �v�nements du client, ce qui donne

    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
     
    void OnAccept()
    {
       CSocket* sock =  new CSocket;
       Listener.accept(CSocket);
       SOCKET SocketHandle = sock.detach();
       AfxBeginThread(MethodeThread, SocketHandle);
    }
     
    UINT MethodeThread(LPVOID pParam)
    {
       CSocket* sock = new CSocket;
       SOCKET* hsock = static_cast<SOCKET*>(pParam)
       sock.attach(hsock);
    }
    C'est volontairement tr�s simplifi�... Donc PAS TOUT LE TEMPS (et c'est bien le probl�me) j'ai une assertion dans sockcore.cpp, dans la m�thode DoCallBack(). Pas mal de monde a eu ce probl�me (voir sur CodeGuru et autre) et personne n'arrive � le r�soudre. J'ai entendu parler d'une histoire de pompe d'�x�cution qui ne s'arr�terait pas, enfin c'est pas de mon niveau. Help.[/code]

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Euh... Je ne sais pas si c'est dans le code original, mais dans celui-ci, tu passes au thread un "SOCKET", et tu r�cup�res un "SOCKET *"...

    Mais pour le reste, je ne peux pas te dire... Je n'ai jamais utilis� CSocket avec les listeners, seulement CAsyncSocket...
    (D'ailleurs, je ne savais m�me pas que les listeners �taient suppos�s marcher pour CSocket...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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,
    tu peux citer les liens de codeguru ?
    autrement le probleme doit venir effectivement de la pompe a messages.
    les classes MFC CSocket utilisent une fenetre pour les messages internes .
    en mettant le socket client dans un thread client tu tombes dans le probleme evoqu� dans la faq:
    http://c.developpez.com/faq/vc/?page...d#WorkerThread

    La solution de ton probleme c'est de ne pas utiliser de thread pour le client tu n'en as pas besoin le systeme de notification par messages suffit....
    voir aussi cette enfilade:
    http://www.developpez.net/forums/vie...866617#1866617
    tu dois creer une classe deriv�e pour la socket client (voir post cit�) pour g�rer les messages.


  4. #4
    Membre � l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par d�faut
    C'�tait bien �videmment pour illustrer le principe, le code est assez faux en fait!!! Pour r�pondre � la question "pourquoi un thread?", c'est parce que j'aimerais pouvoir lancer les op�rations d'envoi et de r�ception (qui sont bloquantes en CSocket) sans pour autant figer le serveur.

    Les liens qui me concernent sont:
    sur CodeGuru:
    - un probl�me identique au mien, non r�solu (la solution pr�sent�e est celle que j'utilise)
    http://www.codeguru.com/forum/showthread.php?t=73085
    -la m�me erreur mais je ne comprends rien � ce que le type a fait pour r�soudre le probl�me!
    http://www.codeguru.com/forum/archive/index.php/t-156500.html
    sur CodeProject:
    - ce que je veux faire (bon OK en plus pervers!):
    http://www.codeproject.com/Purgatory/CSocket_Server_App.asp
    et enfin (ce qui me fait dire que �a doit �tre faisable) sur msdn
    - http://support.microsoft.com/kb/175668/EN-US/

    Voila pourquoi je m'accroche, je suis sur que c'est possible! Merci pour vos r�ponses.

  5. #5
    Membre � l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par d�faut
    Bon �tant donn� l'avis de certains potes... je vais passer aux sockets API. Mais pour ma curiosit� perso �a me pose quand m�me un probl�me. Merci quand m�me!

  6. #6
    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,
    la question est de savoir pourquoi tu veux absolument cr�er un thread pour le client ? (�a fonctionne sans).
    sinon tu peux regarder ce lien socket2 asynchrone +thread :
    http://www.codeguru.com/network/async_socket.html

Discussions similaires

  1. [MFC]fuite dans dllmodul.cpp
    Par VitamineC dans le forum MFC
    R�ponses: 4
    Dernier message: 08/05/2006, 12h59
  2. R�ponses: 4
    Dernier message: 11/06/2004, 16h27
  3. [MFC] probl�me avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    R�ponses: 12
    Dernier message: 11/06/2004, 15h31
  4. R�ponses: 4
    Dernier message: 15/01/2004, 22h53
  5. R�ponses: 6
    Dernier message: 14/02/2003, 16h52

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