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 :

Serveur multi-client CWinThread & CAsyncSocket


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut Serveur multi-client CWinThread & CAsyncSocket
    Bonjour à tous,
    Je suis un débutant en C++ et en communication socket.
    Je souhaite réaliser un serveur capable de recevoir la connexion de plusieurs clients en utilisant les classes MFC !
    J'ai une classe CSocketService et CSocketServeur qui dérivent de CAsyncSocket, et d'après mes recherches pour créer un multi-client, on doit créer un thread après le Accpet() dans la méthode OnAccept() de CAsyncSocket.
    Mon thread est correctement crée, mais ensuite je ne sais pas quoi mettre comme code dans la fonction de mon thread pour qu'il puissent recevoir des messages des clients.
    Tous mon code est situé dans le fichier SocketServeur.cpp qui dérivent de CAsyncSocket
    Je déclare mon thread comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void CSocketServeur::OnAccept(int CodeErreur)
    {
    	Accept(m_SocService);
    /*********************************************************************************
    Initialisation Worker Thread 
    **********************************************************************************/
    	pthread = new CThread;
    	pthread = AfxBeginThread(WorkerRunFunction,0);
    /********************************************************************************/
    	CAsyncSocket::OnAccept(CodeErreur);	
    }
    La fonction de mon Worker Thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /***************************************************************************
    Fonction thread de travail
    ***************************************************************************/
    UINT WorkerRunFunction (LPVOID pParam)
    {
    	//message de vérification du thread
    	AfxMessageBox("Thread correctement crée");
    	// ???? Code à déterminer
    	return 0;
    }
    Mon fichier SocketServeur.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CSocketServeur : public CAsyncSocket
    {
    public:
    	CSocketServeur();
    	virtual ~CSocketServeur();
    	void OnAccept(int CodeErreur);
    	CSocketService m_SocService;
    	CWinThread *pthread;
    };
    Je vous remercie de votre aide d'avance

  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,
    tu n'as pas besoin de créer un thread pour la gestion du client.
    il que tu fasses une classe héritée de CAsyncSocket pour la partie client qui redéfinisse la méthode OnReceive.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Merci pour ta réponse, mais je n'arrive pas à la comprendre, car mon serveur doit accepter plusieurs connexion de clients c'est là mon problème il en accepte seulement une et lorsque je lance un deuxième client il plante (erreur windows).
    La méthode OnReceive() est seulement utilisée chez le serveur pour lire les messages reçues du client connecté.
    Donc je ne vois pas pourquoi je doit redéfinir cette méthode chez le client.
    Il y a juste une message box qui s'affiche chez lui pour lui dire que la connexion a été réussie ou pas !
    Mon problème, enfin je pense est que je ne sais pas correctement utiliser utiliser les Thread ou les Socket.

    Pour résoudre mon pb je pense que je devrai appeler une méthode membre de CAsyncSocket dans mon thread et je ne sais pas comment faire ! Pouvez-vous m'aider ?

  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
    voir ce post:
    http://www.developpez.net/forums/d18...ation-serveur/
    ou encore ce post:
    http://www.developpez.net/forums/d94...socket-accept/
    l'objet client doit être autonome ,la socket serveur accepte la connexion crée la socket cliente .
    l'objet client doit dériver de CAsyncSocket ou de CSocket , le traitement de la réception des données se faisant dans la classe elle même.
    je le redit pas besoin de thread (voir explications dans les postes cités).
    voir aussi: http://msdn.microsoft.com/en-us/library/91c1cy99(VS.80).aspx

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Merci pour ta réponse je vai voir sa tout de suite !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 7
    Par défaut
    Ok donc si je comprend bien les autres post sur le forum.
    Pour chaque client qui souhaite se connecter, je doit faire en sorte que mon programme crée un nouveau Accept() avec la socket en paramètre, donc pas besoin de thread car tout est fait en interne, je doit juste m'occuper de coder correctement OnAccept() pour crée un objet de CAsynSocket à chaque fois qu'un client souhaite se connecter et l'associer au Accept().
    C'est bien sa ?
    Si sa marche comme sa les MFC c'est super sa simplifie la vie du développeur

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

Discussions similaires

  1. [sockets][UDP][C/C++] serveur multi-clients
    Par l@rry dans le forum Développement
    Réponses: 4
    Dernier message: 08/06/2006, 14h11
  2. serveur multi clients
    Par aaronw dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/03/2006, 09h01
  3. Fork, pthread et serveur multi-clients
    Par Pico10 dans le forum POSIX
    Réponses: 13
    Dernier message: 05/01/2006, 11h48
  4. Serveur Multi-clients
    Par darsky dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/04/2004, 09h53
  5. Création d'un Serveur Multi Client
    Par N*E*R*D dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/03/2004, 17h13

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