Salut,
Je suis en train de faire un client serveur en C sur windows. Le client envoie des données sur le serveur qui s'occupe des les écrires sur une BDD. Quand le serveur a récupérer toute les données il renvoit au client la longueur des données reçu pour vérifier qu'il n'y est pas d'erreur.
Au niveau de la reception des données sur le serveur et l'écriture sur la BDD aucun problème. J'ai rajouté récemment la fonction pour le serveur de renvoyé le nombre de caractère au client pour vérifier si il y a des erreurs et depuis le serveur et le client restent bloqués sur la fonction recv, comme si chacun attendais de recevoir un message ...
Est ce qu'il y a une procédure particulière a mettre en place quand on souhaite que son serveur puisse réceptionner des données et en envoyé? Comme déconnecté la connexion et la remettre en place ensuite?
Voici le code :
Serveur
Client :
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
38
39 static int read_client(SOCKET sock, char *buffer) { int n = 0; int compteur = 0; do { printf("test 5 \n"); if((n = recv(sock, buffer, MAX_SIZE - 1, 0)) < 0) //problème ici, le serveur s'attends a recevoir quelque chose mais il reçoit rien ! { printf("test 1 \n"); n = 0; if(compteur == 0) { perror("recv()"); exit(errno); } } compteur += n; buffer[n] = 0; printf("Longueur message : %i \n", n); printf("buffer : %s \n", buffer); if(n != 0) { query_mysql(buffer); } printf("test 4 \n"); } while( n != 0); printf("test 2 \n"); printf("longueur total message : %i \n", compteur); char str_compteur[16]; sprintf(str_compteur, "%i", compteur); printf("str_compteur : %s \n", str_compteur); write_client(sock, str_compteur); //envoie le nombre de caractère du message reçu pour effectuer un test dessus return compteur; }
PS : le client stocke sur un fichier .txt les données avant de les envoyé.
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 static void read_and_send_file(SOCKET sock) { FILE* fichier = NULL; char str[MAX_SIZE]; int i = 0; fichier = fopen(PATH_TXT,"r"); if(fichier != NULL) { while(fgets(str, MAX_SIZE, fichier) != NULL) { printf("nb boucle : %i \n", i); printf("str : %s \n", str); write_server(sock, str); i++; } fclose(fichier); char buffer[16]; printf("test 1 \n"); //recv_server(sock, buffer); printf("read_and_send_file buffer : %s \n", buffer); } else { perror("fopen"); } }
Merci d'avance !
Partager