Problem d'envoi de fichier par socket en c
sokman
-
M-01 -
M-01 -
Bonjour,
je veut envoyer un fichier(image, texte, executable) via les socket en c, j'ai créer mon programme et il marche que pour les fichier texte. Pour les image, musique .., tous se qui est en binaire sa marche pas.
voila mon code qui gere lenvoi de fichier:
//serveur
*********************************************************************************************
char contenu_fichier[1024];
FILE* fichier = fopen(fichier.exe, "rb");
while (fgets(contenu_fichier, sizeof(contenu_fichier), fichier) != NULL)
{
send(s, contenu_fichier, sizeof(contenu_fichier), 0);//il envoi ligne par ligne en binaire
}
send(s_c, "fini", sizeof("fini"), 0); // il envoi "fini" pour dir au client de que lenvoi est terminer
fclose(fichier);
//client
*********************************************************************************************
char contenu_fichier[1024];
FILE* fichier = fopen("fichier.exe", "wb");
while (a)
{
recv(s, contenu_fichier, sizeof(contenu_fichier), 0);//il recoi
if (strcmp(contenu_fichier, "fini") == 0) a=0;//il verifi si lenvoi est fini
else fputs(contenu_fichier, fichier);//il ecri ligne par ligne dans le fichier
}
fclose(fichier);
*******************************************************************************************
jesper que vous avez compri mon probleme
et que vous allez maidéer.
merci a tous et a++.
je veut envoyer un fichier(image, texte, executable) via les socket en c, j'ai créer mon programme et il marche que pour les fichier texte. Pour les image, musique .., tous se qui est en binaire sa marche pas.
voila mon code qui gere lenvoi de fichier:
//serveur
*********************************************************************************************
char contenu_fichier[1024];
FILE* fichier = fopen(fichier.exe, "rb");
while (fgets(contenu_fichier, sizeof(contenu_fichier), fichier) != NULL)
{
send(s, contenu_fichier, sizeof(contenu_fichier), 0);//il envoi ligne par ligne en binaire
}
send(s_c, "fini", sizeof("fini"), 0); // il envoi "fini" pour dir au client de que lenvoi est terminer
fclose(fichier);
//client
*********************************************************************************************
char contenu_fichier[1024];
FILE* fichier = fopen("fichier.exe", "wb");
while (a)
{
recv(s, contenu_fichier, sizeof(contenu_fichier), 0);//il recoi
if (strcmp(contenu_fichier, "fini") == 0) a=0;//il verifi si lenvoi est fini
else fputs(contenu_fichier, fichier);//il ecri ligne par ligne dans le fichier
}
fclose(fichier);
*******************************************************************************************
jesper que vous avez compri mon probleme
et que vous allez maidéer.
merci a tous et a++.
A voir également:
- Problem d'envoi de fichier par socket en 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
slt sokman
il ne faut pat utiliser fgets() pour lire ton fichier mais fread() et non fputs() pour écrir mais fwrite().
fread(&char,int size,int,file); -> idem pour fwrite()
On peut envoyer les données octet par octet ce qui est facile a mettre en place, mais je te conseil
plutot de développer un algo pour découper ton fichier binaire en blocs se qui permet un envoie plus rapide.
car de toute facon tu ne peut pas mettre toute les donnéés d'un fichier binaire dans un char [trop volumineu]
c'est pour cela quil faut découper ou envoyer octet par octet.
il ne faut pat utiliser fgets() pour lire ton fichier mais fread() et non fputs() pour écrir mais fwrite().
fread(&char,int size,int,file); -> idem pour fwrite()
On peut envoyer les données octet par octet ce qui est facile a mettre en place, mais je te conseil
plutot de développer un algo pour découper ton fichier binaire en blocs se qui permet un envoie plus rapide.
car de toute facon tu ne peut pas mettre toute les donnéés d'un fichier binaire dans un char [trop volumineu]
c'est pour cela quil faut découper ou envoyer octet par octet.