Bonjour,
Je suis actuellement sur un projet perso de serveur de chat mode console avec mon protocole bien à moi...
Donc, dès que je fais un accept, je lance un thread avec en paramètre une structure qui contient la socket du client, celle du serveur et la structure SOCKADDR_IN de l'accepté.
Mais le soucis, c'est que les données que j'ai mis dans la structure une fois passées au thread, son différentes.
J'ai franchement du mal à comprendre pourquoi.
Le code de la structure:
Voici un extrait du code dans la boucle serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct paramserv { int server; int client; SOCKADDR_IN *info; }paramserv;
Et le code de la fonction appelée par le thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 if (listen(s_server, 64) == SOCKET_ERROR) /* listen : commencer l'ecoute */ fprintf(stderr, "La fonction listen a echoue.\n"); else {//on créé un processus pour le client en demande de connection while(1) //acceptation de nouveaux clients. { s_client = accept(s_server, (SOCKADDR *)&client, &csize);//entité bloquante. if (s_client == INVALID_SOCKET) fprintf(stderr, "La fonction accept a echoue.\n"); else { printf("nouveau client accepte\n"); pr->client=s_client; pr->server=s_server; pr->info=&client;//client = structure CreateThread(NULL,(int)NULL,(LPTHREAD_START_ROUTINE) newClient, (LPVOID)&pr,(int) NULL, &dwThread); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void newClient(paramserv *pr) { printf("client %d",pr->client); printf("serveur %d",pr->server); SOCKET s_client = pr->client; int s_server = pr->server; SOCKADDR_IN *client = pr->info; char pseudo[32]; //int csize = sizeof(client); //s_client = accept(s_server, (SOCKADDR *)&client, &csize); if (s_client == INVALID_SOCKET) fprintf(stderr, "La fonction accept a echoue.\n"); else {....
Partager