bonjour,
je dois réaliser un programme client/serveur (serveur multiclient, avec pthread). mon client arrive a se connecter au serveur, mais lorsque que j'envoie des données impossible de les recevoir sur le seveur, je recois des données vide ..
pourtant avec wireshark je vois que mes données arrivent sur le serveur.
voici la partie de mon serveur chargé de recevoir les données:
je lance mon thread:
ma structure Structhread, qui me permet de récup l'id du socket,l'adresse etc..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 pthread_t receptionner; /* Lancement du thread */ pthread_create (&receptionner, NULL, reception, structThread);
et enfin ma fonction chargé de receptionner les données:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 struct StructThread { pthread_t thread; SOCKADDR_IN sin; int recsize; SOCKET sock; int err; char data[500]; };
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
26
27
28
29
30
31
32
33
34
35
36
37 void *reception (void *p_data) { struct StructThread *structThread = (struct StructThread *)p_data; char data[4096]; int sock_err; size_t nb_rec; Ldonnee* ladonnee = (Ldonnee*) malloc(sizeof(Ldonnee)); // structure que j'ai crée, qui contient un champ str de type xmlChar* ou je stock mes données recu ladonnee->str = (xmlChar *) malloc(sizeof(xmlChar)); while(1) { /* Reception des donnees de la socket */ sock_err = recv (structThread->sock, data, strlen(data),0); nb_rec = sock_err; if(sock_err > 0) //si il y a des données { data[nb_rec] = 0; ladonnee->taille=4096; ladonnee->socket=structThread->sock; strcpy(data, ladonnee->str); memset(data, 0 ,sizeof (data-1)); fflush (stdout); } else if (sock_err == 0) { fin = 1; data[0] = '\0'; } } shutdown (structThread->sock, 2); printf ("[RESEAU] - Client deconnecte (Socket %d)\n", structThread->sock); close (structThread->sock); free (structThread); return NULL; }
Partager