Problem d'envoi de fichier par socket en c

Fermé
sokman - 8 déc. 2008 à 19:44
 M-01 - 26 déc. 2008 à 23:29
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++.
A voir également:

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.
1