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é :
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
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); }
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
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++; }
Merci d'avance à tout ceux qui pourront m'aider
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;
Partager