salut a tous !
voila, j'ai un soucis en c :
je souhaite transmettre des fichier via socket pour un p2p. le probleme est que le transfert se passe mal sans que je comprenne ... voila mon code :
STRUCTURE COMMUNE :
COTE SERVEUR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct { char Buffer[500]; int finFich; }sFich;
COTE 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 void RecevoirFich(SOCKET sock , char * Trame) { char tmpNom[499]; char tst; int sortie = 0; int lngRcv; int i = 0 , j = 1; for(i,j; Trame[j] != '\0';i++,j++) tmpNom[i] = Trame[j]; tmpNom[i] = '\0'; printf("3 - reception fichier : %s\n",tmpNom); FILE * Fich = fopen(tmpNom,"wb"); sFich buff; buff.finFich = 0; if(Fich != NULL ) { while( buff.finFich == 0) { recv(sock, &buff, sizeof( buff ) , 0); fwrite(buff.Buffer , 1 , strlen(buff.Buffer)*sizeof(char) , Fich); } fclose(Fich); } }
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 void envoyerFichier(SOCKET sock,char * Buff) { char NomFichier[499]; char buff[500] ; sFich buffer; buffer.finFich = 0; int i = 0 , j = 1; for(i,j; Buff[j] != '\0';i++,j++) NomFichier[i] = Buff[j]; sendBuff(sock , Buff); FILE* fichier =fopen(NomFichier , "rb"); if ( fichier != NULL) // ce test échoue si le fichier n'est pas ouvert { while (buffer.finFich == 0) { if( fread( buffer.Buffer , sizeof(char) , 500 , fichier ) <= 0) buffer.finFich = 1; send(sock, &buffer, sizeof(buffer), 0); printf("%s\n" , buffer.Buffer); memset(buffer.Buffer,'\0',(500-1)); } printf("envoi %s fini \n", NomFichier); fclose(fichier); } else printf("erreur ouverture fichier\n"); }
je signale juste que le transfert de fichier txt marche trés bien ...
merci d'avance !
Partager