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 :

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 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
 
 
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;
}
Et voilà ce que j'ai en sortie :

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
Je ne comprend pas pourquoi j'ai cette erreur.

Merci d'avance pour votre aide.