link953 | Salut!
Alors j'ai gratté de mon coté ( je n'aime pas attendre la solution sagement et j'ai écris ceci:
Code :
- void* SocketHandler(void* lp)
- {
- int *csock = (int*)lp;
- int recu;
- int bytecount;
- int taille_buffer;
- unsigned char *buffer;
- unsigned char buffer_fichier[BUFSIZ];
- int i;
- FILE *fd;
-
- //Reception nom du fichier
-
- if((bytecount = recv(*csock, &recu, sizeof(recu), MSG_WAITALL))== -1) //premier recv qui permet de récuperer la taille de la chaine
- {
- fprintf(stderr, "Erreur réception données %d\n", errno);
-
- }
- printf("Taille recu: %d et en bytes %d \n", ntohl(recu),bytecount);
-
- taille_buffer = ntohl(recu);
- buffer=malloc(taille_buffer);
-
- if((bytecount = recv(*csock, buffer, taille_buffer, 0))== -1) //Deuxieme recv permettant de récuperer dans un buffer adequat la chaine de caractére
- {
- fprintf(stderr, "Erreur réception données %d\n", errno);
-
- }
- printf("String recu: %s %d \n", buffer, bytecount);
-
- //Reception fichier
-
- if((fd=fopen(buffer,"wb" ))==NULL){ //ouverture du fichier avec la même chaine de caractére que celle envoyée
- perror("Erreur" );
- goto FINISH;
- }
- fseek(fd,0,SEEK_SET);
- if((bytecount = recv(*csock, &recu, sizeof(recu), MSG_WAITALL))== -1) //Reception taille du fichier
- {
-
- fprintf(stderr, "Erreur réception données %d\n", errno);
-
- }
- printf("Taille recu: %d et en bytes %d \n", ntohl(recu),bytecount);
- taille_buffer = ntohl(recu);
-
-
- while((bytecount = recv(*csock, buffer_fichier,BUFSIZ, 0))>0) //reception du fichier et vidage du buffer dans le fichier ouvert précédemment.
- fwrite(buffer_fichier,1,bytecount,fd);
- fclose(fd);
- write(0,"Fin du thread\n",15);
- goto FINISH;
-
-
- FINISH:
- free(csock);
- return 0;
- }
|
Qu'en pensez vous? |