Probleme de serveur multi-client

cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007 - 15 mars 2006 à 15:23
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 15 mars 2006 à 17:21
je m'explique je suis arrivé a creer un serveur qui peut accepter 2
client mais le probleme est que si j'essaye de creer les 2 sockets sur
le meme port ma deuxieme socket me renvoie INVALID_SOCKET mais si je
change de port entre la premiere et la deuxieme tou marche bien

voila le code



#include <winsock2.h>

#include



using namespace std;

DWORD WINAPI dwThreadProc(LPVOID lParam);

DWORD dwThread;

HANDLE hThread;

WSADATA WSAData;

SOCKET sock;

SOCKET csock1;

SOCKET csock2;

SOCKADDR_IN sin;

SOCKADDR_IN csin;





int sinsize;

char Message[65535];



int main (int argc, char* argv[])

{

WSAStartup(MAKEWORD(2,2), &WSAData);

hThread = CreateThread(NULL, 0, dwThreadProc, 0, CREATE_SUSPENDED, &dwThread);

ResumeThread(hThread);



sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;

sin.sin_family = AF_INET;

sin.sin_port
= htons(23);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));

listen(sock, 0);

sinsize = sizeof(csin);

csock1 = accept(sock, (SOCKADDR *)&csin, &sinsize);



Sleep(1000);

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;

sin.sin_family = AF_INET;

sin.sin_port
=
htons(23);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));

listen(sock, 0);

sinsize = sizeof(csin);

csock2 = accept(sock, (SOCKADDR *)&csin, &sinsize);

Sleep(100000);

}



DWORD WINAPI dwThreadProc(LPVOID lParam)

{

while (strcmp(Message,"exit")!= 0)

{

if((csock1 != INVALID_SOCKET))

{

cin.getline(Message, 65535);

send(csock1, Message, sizeof(Message), 0);

}

}

while (strcmp(Message,"quit")!= 0)

{

if((csock2 != INVALID_SOCKET))

{

cin.getline(Message, 65535);

send(csock2, Message, sizeof(Message), 0);

}

else

{

cout << "la socket est invalide\n";

}

}

}





comme vous le voyer mon programme essaye d'abord d'envoyer des info a
la premiere socket et si on tape "exit" on passe a la deuxieme socket.

5 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
15 mars 2006 à 16:15
Salut,

il ne faut pas recreer et rebinder le socket 'sock' a chaque connection
de client, mais juste une fois au debut du prog. Ensuite tu peux
appeler accept() autant de fois que tu veux sur le socket sock, pour
accepter les connexions clientes.

Au niveau du thread, gros probleme, puisqu'il fait des comparaisons
avec Message, alors que Message n'est pas initialisé au debut du prog !
0
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
15 mars 2006 à 16:43
Merci pour un fois que c'est plus simple que ce que je pensai.

pour la variable Message ya pas de probleme je l'ai declaré au debut du programme.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
15 mars 2006 à 16:51
Salut,
j'ai dis initialisée et non déclarer.
Si ta chaine n'est pas valide, et que tu fais un strcmp() dessus, il y a risque de plantage.
0
cs_Mick7 Messages postés 54 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 18 avril 2007
15 mars 2006 à 17:02
comment je l'initialise je lui met une valeur au hasard?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
15 mars 2006 à 17:21
Salut,
Ben tu pourrais faire un memset(Message, 0, sizeof(Message)) par exemple.
0
Rejoignez-nous