Bonjour,
J'ai quelques problèmes avec mes petits programmes client/serveur. J'ai un serveur qui accepte une seule connexion qui lit ce qu'on lui envoie et répond. Le client lui, se connecte, envoie une première trame, lit la réponse du serveur et renvoie une deuxième trame (fi_transmission). La connexion se termine alors avec le message Error receiving data: Connection reset by peer, je ne comprend pas d'où vient le problème, je sollicite donc votre aide.
Une partie du code serveur :
Et une partie de mon 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
40
41
42
43
44 int main (int argc, char * argv[]){ char Buffer[1024]; bzero (&Buffer, sizeof (Buffer)); char reponse[6]={21,3,'1','3','1','\0'}; /* Création de ma socket de connexion (je détaille pas tout ici) */ listen_socket = socket(AF_INET,SOCK_STREAM,0); while(1){ /* J'accepte la connexion (je détaille pas tout ici) */ remote_socket = accept(listen_socket, (struct sockaddr *) &appelant, &sizeofappelant); // Tant qu'on reçoit quelque chose while(rc = recv(remote_socket, Buffer, sizeof(Buffer),0)){ //On lit les éventuelles données entrantes if (rc < 0){ perror("Error receiving data"); close(remote_socket); close(listen_socket); exit(EXIT_FAILURE); } printf("Recu sur le serveur : %s\n", Buffer); bzero (&Buffer, sizeof (Buffer)); if (send(remote_socket, reponse, sizeof(reponse), 0) < 0){ perror("Error while sending data"); close(remote_socket); return 1; } } printf("Fin de la connexion\n"); close(remote_socket); } close(listen_socket); }
Et voilà ce que j'ai en sortie :
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 char fin_transmission[10] = {4,3, '1', '3', '1', '\0'}; if (connect(descripteur_socket,(struct sockaddr *)&info_socket, sizeof(struct sockaddr)) < 0){ perror ("Client : Erreur lors de la connexion (connect)\n"); close (descripteur_socket); return 1; } /* On envoie les données */ if (send(descripteur_socket, trame, strlen(trame), 0) < 0){ perror("Client : Erreur lors de l'envoi des données (send)\n"); printf("Erreur \n"); close(descripteur_socket); return 1; } /* On récupère la réponse du serveur */ if (recv(descripteur_socket, Buffer, sizeof(Buffer),0) < 0){ perror("Client : Erreur lors de la réception (send)"); printf("Erreur \n"); close(descripteur_socket); return 1; } printf("Donnés reçues par le client : %s\n", Buffer); /* On renvoie des données */ if (send(descripteur_socket, fin_transmission, strlen(fin_transmission), 0) < 0){ perror("Client : Erreur lors de l'envoi des données (send)\n"); close(descripteur_socket); return 1; }
Je ne comprend pas pourquoi j'ai cette erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Recu sur le serveur : $A8455484$B554845454575$C445$D5451254875457184578$E5857$F545$G87544545131 /* trame */ Donnés reçues par le client : 131 /* reponse */ Recu sur le serveur : 131 /* fin_transmission */ Error receiving data: Connection reset by peer
Merci d'avance pour votre aide.
Partager