daviid00
Messages postés3Date d'inscriptionjeudi 15 décembre 2005StatutMembreDernière intervention24 février 2010
-
23 févr. 2010 à 13:10
daviid00
Messages postés3Date d'inscriptionjeudi 15 décembre 2005StatutMembreDernière intervention24 février 2010
-
24 févr. 2010 à 10:29
Bonjour,
Je suis entrain de développer un client TCP qui se connecte de manière asynchrone à un serveur. Pour ce faire j'utilise la fonction WSAAsyncselect().
Mon problème est le suivant. Le client envoie une demande de connexion via la fonction connect(). Cette dernière génère un évènement FD_ACCEPT sur le serveur. Il accepte la connexion par la fonction accept(). Une fois que la connexion est établie, la CALLBACK fonction du client n'est pas appelée : l'évènement FD_CONNECT n'est pas généré. Malgré mes recherches sur internet, je ne suis pas en mesure d'identifier le problème.
// Create the socket, and attempt to connect to the server
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
printf("socket() failed with error code %d\n", WSAGetLastError());
return 1;
}
else
{
printf("socket() looks fine!\n");
}
if (WSAAsyncSelect(sClient, Window, WM_SOCKET, FD_CONNECT | FD_READ| FD_WRITE) == 0)
{
printf("WSAAsyncSelect() is OK lol!\n");
}
else
{
printf("WSAAsyncSelect() failed with error code %d\n", WSAGetLastError());
}
daviid00
Messages postés3Date d'inscriptionjeudi 15 décembre 2005StatutMembreDernière intervention24 février 2010 23 févr. 2010 à 19:00
Salut,
Merci pour ta réponse.
J'ai mis cette boucle for(;;) afin d'isoler le problème. Une fois que le client a envoyé la demande de connexion, il ne fait plus rien. Normalement il devrait sortir de cette boucle for via l'évènement FD_CONNECT puis y retourner.
Le problème sera résolu si le message ("Socket number %d connected\n", wParam) s'inscrit sur la console d'application du client, ce qui n'est pas le cas actuellement
Peut-être que je n'ai pas bien compris l'enchainement client-serveur. Une fois la connexion acceptée par le serveur, le client doit-il effectuer une requête particulière avant de recevoir l'évènement FD_CONNECT ?
Ci-dessous se trouve un lien avec les projets du client et du serveur :
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 23 févr. 2010 à 20:59
Salut,
en général, quand on rentre dans une boucle infinie, on en ressort jamais! à partir de ça, tu ne devrais pas être étonné de ne rien voir s'afficher dans ton programme.
comme je te l'ai dis tout a l'heure, il te manque une boucle de traitement de messages qui permettra de traiter tout les messages que reçoit ta fenêtre. j'imagine que ton WM_SOCKET avec FD_CONNECT est correctement posté dans la pile de message, mais vu que tu n'a rien qui dépile & traite ces messages, rien ne se passe.
Vous n’avez pas trouvé la réponse que vous recherchez ?