Transfert gros fichier binaire socket c
yosh123
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai réussi a transférer des gros fichiers binaire a travers les socket c mais malheureusement la taille du buffer que je met dans le buffer de recv et de send ne doit pas dépasse 4 octets sinon le fichier est corrompus lors du transfert
voici le code ma fonction upload coté serveur
voici le code de ma fonction téléchargement coté client
merci
j'ai réussi a transférer des gros fichiers binaire a travers les socket c mais malheureusement la taille du buffer que je met dans le buffer de recv et de send ne doit pas dépasse 4 octets sinon le fichier est corrompus lors du transfert
voici le code ma fonction upload coté serveur
int upload(const char* fichier,int socket,int buff) { FILE *fs; int octet_envoye; int taille_fichier; unsigned char *buffer; fs = fopen(fichier, "rb"); int deplacement=50; fseek(fs, 0, SEEK_END); taille_fichier = ftell(fs); buffer = malloc(buff); fseek(fs, 0, SEEK_SET); int octet_total=0; int taille_temporaire=ftell(fs); while (taille_temporaire!=taille_fichier) { fread(buffer,sizeof(char),buff,fs); octet_envoye=send(socket, buffer, sizeof(buffer), 0); if(octet_envoye<0) { perror("erreur de send"); return 1; } printf("le nombre d'octet envoyé est %d\n",octet_envoye); taille_temporaire=ftell(fs); octet_total+=octet_envoye; printf("nombre total d'octet envoye est %d \n",octet_total); printf("voici la taille temporaire est %d\n",taille_temporaire); printf("le nombre d'octet envoyé est %d\n",octet_envoye); } return 0; }
voici le code de ma fonction téléchargement coté client
int telechargement(const char *fichier,int socket,int buff) { FILE* fd; unsigned char *buffer; buffer=malloc(buff); fd=fopen(fichier,"ab"); int octet_recu=0; int taille_fichier=65115; fseek(fd, 0, SEEK_SET); int taille_temporaire=ftell(fd); taille_temporaire=0; while(taille_temporaire<=taille_fichier) { octet_recu=recv(socket, buffer, sizeof(buffer), 0); if(octet_recu<0) { perror("erreur recv"); } printf("le nombre d'octet reçu est %d\n",octet_recu); fwrite(buffer,sizeof(char),buff,fd); taille_temporaire=ftell(fd); printf("la taille temporaire est %d \n",taille_temporaire); } fclose(fd); return 0; }
merci
A voir également:
- Transfert gros fichier binaire socket c
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
Salut
je suppose que c'est sous Windows que tu fait ça ? Sous win, il considère ce que tu transmet comme des caractère et tronque certaine donnée (caractères nuls ou retour à la ligne). Et ça peut arriver dans un fichier binaire.
Pour éviter ça, tu peux essayer d'utiliser read et write http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/read.2.html (le descripteur de fichier, c'est le socket). Avec ves fonctions, tu dois même pouvoir faire de plus gros buffers.
je suppose que c'est sous Windows que tu fait ça ? Sous win, il considère ce que tu transmet comme des caractère et tronque certaine donnée (caractères nuls ou retour à la ligne). Et ça peut arriver dans un fichier binaire.
Pour éviter ça, tu peux essayer d'utiliser read et write http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/read.2.html (le descripteur de fichier, c'est le socket). Avec ves fonctions, tu dois même pouvoir faire de plus gros buffers.