Bonjour,

Je suis actuellement en train de coder une petite application multi client qui consiste à transférer des fichiers du serveur au clien et inversement par socket (mode TCP).

On essaye de transférer un fichier à l'aide de structure.
Les affichage serveur montrent que tous les paquets sont bien envoyés mais à la réception, je recois des paquets qui ne correspondent pas à ceux envoyés.

Cependant si je mets une instruction invalide après la réception du paquet dans le code client, le transfert s'execute correctement

Voici le code incriminé :
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
// On ouvre le fichier en ecriture
			fichier = fopen(filePath,"w+b");
			if(fichier!=NULL){ 				 
				// On reconstruit le fichier
				 while (tailleFichier<entete.size){
					lon = recv(sd, &cmd, sizeof(command), 0);
					fwrite(cmd.result,cmd.size,1,fichier);
					tailleFichier = tailleFichier+cmd.size;
					printf("Paquet n°%d de %d bits\n",cmd.num,lon);
					printf("NB Ecrits : %d octets\n",cmd.size);
					printf("Avancement : %d/%d \n",tailleFichier,entete.size);
					printf("Type : %s \n Arg :%s\n",cmd.type,cmd.arg);
					system("pause()");
				}
				fclose(fichier);
				printf("Fichier crée avec une taille de %d octets\n",tailleFichier);
			}
Le code serveur pour l'envoi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
while(!feof(fichier)){
					nb_bloc_lus = fread(&cmd.result,BLOC,1,fichier);				
					if(nb_bloc_lus==0) cmd.size = (taille-m);
					else cmd.size = BLOC;
					cmd.num=numPaquet;
					printf("Paquet n°%d\n",cmd.num);
					printf("NB Lus : %d octets (%d)\n",cmd.size,(taille-m));				
					send(soc,&cmd, sizeof(command),0);
					m=m+cmd.size;	
					printf("Avancement : %d/%d \n",m,taille);			
					numPaquet++;				
				}
La structure adaptée pour la commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
typedef struct{
 char type[10];
 char arg[50];
 char result[BLOC];
 unsigned long  size;
 unsigned long  num;
}command;
Merci d'avance à tout ceux qui pourront m'aider