begin process at 2008 07 06 00:26:28
1 205 401 membres
368 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : sockets MFC [ Divers / Général ] (niceusef)

sockets MFC le 12/04/2008 05:45:05

niceusef

Bonjour,
je suis entrain de réaliser une application de chat en se basant sur les sockets
après la crétion du serveur :
server.Create(port);
server.Listen();

server est une CSocket

je voulé pas ke mon programme se bloque alors g fais la partie d'acceptation dans un thread à part:
while(true)
 {  
  Socket *s=new Socket();
  server.Accept(*s);
                }
le problème qui se pose est un peu bizzar c que avec ce code la connexion s'etablie mé l'événement OnReceive se déclenche pas tandis que si je rajoute un msgbox aprés accept tout marche parfaitement

je suis bloqué ; merci d'avance


Re : sockets MFC le 12/04/2008 09:29:31

Scooper
Salut,
Je ne sais pas comment tu as fait mais normallement il faut que tu crée 2 classes qui dérivent de CAsyncSocket (ou CSocket suivant ce que tu veux faire) et que tu override les evt OnAccept, OnReceive, etc ...
Tu peux faire un truc du style (de tete)

en attribut de ta classe :
CMySocketServ m_oSockServ;
CMySocketClient** m_paSockCl; //a initialisé dans ton constructeur pour avoir un nombre non défini de client
ou
CMySocketClient m_aoSockCl[TONNBMAXDECLIENT] si ta pa envie de te prendre la tete

tu rajoute un attribut a ces 2 classes qui contient le hwnd de ta dialog

et apres dans les evt OnAccept; ... tu fait ((CMyDialog*)m_pParent)->AcceptLaSocket(), ((CMyDialog*)m_pParent)->DonneeRecuDeLapartde(this)

par exemple, comme ca tu gere tout dans ta dialog ('ou dans la classe qui handle les communications)

Normallement tu n'a pas besoin de faire de thread vu que le OnAccept est un evt qui se déclenche uniquement lorsqu'un client se connecte

Re : sockets MFC le 12/04/2008 09:30:30

Scooper
et apres dans le onaccept dla socket server tu bind la socket client et tu la stocke dans l'array

Re : sockets MFC le 12/04/2008 20:01:55

niceusef

tt d'abord merci à l'interet que ta accordé à mon blème

en fait j'ai dêja fait ce que ta proposé a propos d'héritage sinon j'auré pa pu modifier le code dans OnReceive ; é je vien de rajouter ce k tu ma di dans OnAccept() par la suite g constaté ke l'évént OnAccept() ne se declenche pas

méme si j fé dedans k un msgbox pr m'indiqué l'acception

dsl pr le dérangement 


Re : sockets MFC le 13/04/2008 11:37:20

Scooper
c'est que ton server n'écoute pas.
check les retour des différentes fonction et avec GetLastError() regarde l'érreur ca pourra t'aider.
Si tu veux etre sur que ton server écoute tu le verra avec netstat -a et tu dois voir qu'il écoute sur le port que tu as donnée.
Sinon fait un telnet sur ton serv et regarde si ca te met pas connection refused

Re : sockets MFC le 14/04/2008 01:46:45

niceusef
salut
merci infiniment chef rah j'ai résolé le bleme;si ça te dérangre pas bien sur j'ai besoin de toi encore:
dans l'evenement onReceive de ma classe héritante de CSocket je fé un appel à une fonction appartient à ma dialog qui reçoit le message et fait un traitement ; le probleme c'est que dans cette fonction j'utilise la Socket pour appeler la methode receive() alors comment pourais je savoir depuis quel cilent j'ai reçu le msg pr déterminer quelle socket je vais utiliser puisque pour chaque client a une socket;;; j'ai décidé d'utiliser un thread pour chaque client é une fois le msg est reçu on réveille le thread associé 
mai pour cela j'aurais besoin de la méthode qui retourne le thread courant de la classe CwinThread  comme la methode currentThread() du JAVA ;;;

j'attend ton aide ;-)   




Classé sous : server, accept, socket, mfc, sockets

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS