Transfert gros fichier binaire socket c
yosh123
Messages postés
1
Statut
Membre
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
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.