OnimenoKyo
Messages postés6Date d'inscriptionlundi 25 novembre 2002StatutMembreDernière intervention22 septembre 2003
-
15 sept. 2003 à 00:48
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
16 sept. 2003 à 07:44
Salut a tous,
J aurai besoin d aide pour continuer un projet de chat,
le probleme c est que je n arrive pas a transferer correctement les fichiers, pour les fichiers text ca va, mais pour les exe, zip, rar, je n y arrive pas...
f = fopen(path, "rb");
if(!f)
{
sprintf(sendbuf,"Invalid file path\r\n");
send(s,sendbuf,strlen(sendbuf),0);
return 0;
}
fseek(f, 0,SEEK_END);
fsize = ftell(f);
fseek(f,0,SEEK_SET);
while (sent < fsize)
{
left = fsize - sent; if (left < 600) max left; else max 600;
fread(datas, sizeof(char), max, f);
send(s, datas, max, 0);
sent += max;
}
fclose(f);
return 1;
}
Merci de m indiquer si ya des erreurs ou si c est pas la bonne methode.
Happy Coding =)
Franchement g pas trop analyser ton code surtout que y'a des variable on c pas comment elles sont déclarées, moi je fais un truc dans ce genre :
f = fopen(path, "rb");
if (f!=NULL)
{
fseek(f, 0,SEEK_END);
fsize = ftell(f);
fseek(f,0,SEEK_SET);
int taillefic=fsize/8; //j'enverrai le fichier 8 octet par 8 octet
int tailleReste=fsize%8; // cela me donne le reste car mon fichier n'est pas forcement un multiple de 8
for(int cpt=0;cpt<taillefic;cpt+8)
{
fread(datas, 1,8, f); //je lis 8 octet de mon buffer
send(s, datas, 8, 0);//je les envoi
}
// on n'a plus que le reste a envoyer
fread(datas, 1,tailleReste, f);
send(s, datas, tailleReste, 0);
Voila tu peux diviser par un autre chiffre si tu veux ou bien envoyer ton fichier octet par octet en faisant while(!eof) mais ma methode est tres bien quand meme...voila @+
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 15 sept. 2003 à 08:55
c'est le strlen sur un buffer qui contient du binaire qui cloche. Il est evident qu'il rencontre un zero nimporte ou.
strlen est reserve aux chaines terminees par un zero.
BruNews, ciao...
OnimenoKyo
Messages postés6Date d'inscriptionlundi 25 novembre 2002StatutMembreDernière intervention22 septembre 2003 15 sept. 2003 à 17:20
Merci pour les reponses,
au fait il n y a pas de strlen() sur un buffer en binaire..
Et j ai reussi avec ta methode senseiwushu merci!
J imagine aussi qu avec des fichiers de grande taille, y vaudrait mieux envoyer 1024 par 1024 octets pour la rapidité,
en tout cas merci pour vos conseils!
a++
Vous n’avez pas trouvé la réponse que vous recherchez ?
senseiwushu
Messages postés5Date d'inscriptionlundi 15 septembre 2003StatutMembreDernière intervention17 octobre 2007 16 sept. 2003 à 03:05
derien, c tjrs un plaisir d'aider :)
effectivement tu peux aussi envoyer par 1024 mais la taille d'une trame ne peux dépasser un certain poids (je ne sais plus la limite) donc après un certain seuil de dépassé les couches réseau se chargeront de fragmenter tes données en plusieurs petit morceau ce qui revient au meme que si tu avait mis une petite taille des le début (d'ailleurs je trouvais ca super rapide deja avec 8 octets, tu n'auras qu'a tester si tu as le temps)
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 16 sept. 2003 à 07:44
Salut,
Si tu envoies des gros buffer, il sera fragmentés en plusieurs envois, chaqu'un de taille maximale (et encore je pense que la limite est superieure a 1ko).
Je pense que ca sera toujours mieux que par petits bouts de 8 octets.
Imagine le cas ou chaque bout de 8 octets est envoyé dans un paquet different...
Enfin, c'etait juste un avis.