Prob wsaasyncselect (encore)

cs_flatou Messages postés 92 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 22 février 2006 - 18 févr. 2004 à 12:03
cs_flatou Messages postés 92 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 22 février 2006 - 18 févr. 2004 à 12:55
je suis tjr ds la prog d'un client/serveur, et pour le serveur j'ai comme un prob que je n'arrive pas a resoudre.
Au lancement de mon serveur, j'ai cette fonction de lancer :

void InitSocket(HWND fHwnd)
{
WSAStartup(MAKEWORD(2,0), &wsa);
s = socket(AF_INET, SOCK_STREAM, 0);

if(SOCKET_ERROR == WSAAsyncSelect(s, fHwnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE))
{
Affiche(fHwnd, "Erreur WSAAsyncSelect 1");
}

sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
sin.sin_addr.S_un.S_addr = INADDR_ANY;

SinSize = sizeof(sin);

if(bind(s,(sockaddr *) &sin, sizeof(sin)) == SOCKET_ERROR)
{
Affiche(fHwnd, "Erreur bind");
}

if(listen(s, 1) == SOCKET_ERROR)
{
Affiche(fHwnd, "Erreur listen");
}
}

ds ma fonction CallBack j'ai :

case WM_SOCKET:
{
switch (WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
{
c = accept(s, (sockaddr *) &sin, &SinSize);
if(c == INVALID_SOCKET)
{
Affiche(hwnd, "Erreur accept");
}
if(SOCKET_ERROR == WSAAsyncSelect(c, hwnd, WM_SOCKET, FD_READ|FD_CLOSE))
{
Affiche(hwnd, "Erreur WSAAsynclect 2");
}
}
case FD_READ:
{
recv(c, buffer, 255, 0);
Affiche(hwnd, buffer);
}
case FD_CLOSE :
{
closesocket(c);
}
}
}

la fonction Affiche() affiche une msgbox avec le texte défini
le probleme est que lorsque j'etablie une connection, j'ai une message box qui s'affiche avec rien comme texte (c'est le Affiche(hwnd, buffer)), et lorsque je fait un send avec le client, rien ne se passe.
qqn aurait-il une solution ?
merci a ceux qui s'interesseront a mon probleme

2 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
18 févr. 2004 à 12:28
Salut,
Faudrais revoir la syntaxe des switch(...)
Apres chaque case il faut mettre un break voire un return.
La, quand tu recois un FD_READ, ben tu execute un FD_READ suivi d'un FD_CLOSE.
0
cs_flatou Messages postés 92 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 22 février 2006
18 févr. 2004 à 12:55
c'est vrai, c'est un oubli de ma part
merci pour avoir trouver l'erreur
0
Rejoignez-nous