niceusef
Messages postés10Date d'inscriptionsamedi 12 avril 2008StatutMembreDernière intervention 3 octobre 2008
-
12 avril 2008 à 05:45
niceusef
Messages postés10Date d'inscriptionsamedi 12 avril 2008StatutMembreDernière intervention 3 octobre 2008
-
14 avril 2008 à 01:46
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
cs_Scooper
Messages postés71Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention12 septembre 2013 12 avril 2008 à 09:29
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
niceusef
Messages postés10Date d'inscriptionsamedi 12 avril 2008StatutMembreDernière intervention 3 octobre 2008 12 avril 2008 à 20:01
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
cs_Scooper
Messages postés71Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention12 septembre 2013 13 avril 2008 à 11:37
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
niceusef
Messages postés10Date d'inscriptionsamedi 12 avril 2008StatutMembreDernière intervention 3 octobre 2008 14 avril 2008 à 01:46
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 ;;;