Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 2006
-
25 juil. 2003 à 22:40
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
26 juil. 2003 à 01:23
bon vouala, j'ai crée un serveur et un client, tt se passe bien, il parle entre eux et tt et tt. Par contre, quan je veu envoyer un fichier, ca merd ! Je peut envoyer des fichier texte mais pas des exe par exemple (pourtant j'ai ouvert le fichier en binaire). Comment faire ?
voici mon code pour l'envoi:
char buf2[1024+1];
FILE *FichierEnvoi = fopen(CheminFichier, "rb");
char TailleChar[100];
DWORD Taille=TailleFichier(CheminFichier); /* Une fonction a moi ki renvoi la taille en octet*/
sprintf(TailleChar,"%d",Taille);
send(Client,TailleChar,strlen(TailleChar),0);
while(!feof(FichierEnvoi))
{
fread(buf2,1024,1,FichierEnvoi);
send(Client,buf2,strlen(buf2),0);
}
fclose(FichierEnvoi);
et voici pour la reception :
int FichierRecu = open(chaine, _O_CREAT | _O_WRONLY | _O_BINARY, 0755);
char buf[1024+1];
memset(buf, 0, sizeof(buf));
recv(Client2, buf, sizeof(buf), 0); /* Pour avoir la taille du fichier */
int taille = atoi(buf);
unsigned int n;
while(taille > 0)
{
memset(buf, 0, sizeof(buf));
n = recv(Client2, buf, sizeof(buf), 0);
write(FichierRecu, buf, n);
taille = taille - n;
}
close(FichierRecu);
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 26 juil. 2003 à 00:10
Ben en fait, je recoit une petite partie de l'exe, du genre 2ko et apres, ca a l'air de bloké, alor evidemment, ca marche pas... Par contre, pour un fichier txt ou rtf (meme gros), ca marche trè bien !
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 26 juil. 2003 à 00:24
nan, ca ne marche pas, au contraire, c encore pire, meme les fichier txt ne marche plus (^_^)
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 26 juil. 2003 à 00:34
Salut,
Moi ce que je vois c'est que tu as un buffer de 1024 octets et que tu envoie les octets 1 par 1 grace a ce buffer. J'imagine que c'est pas ce que tu voulais faire (ou alors tu as vraiment peur des overflows :p)
Met 1 a la place du strlen(buf2) alors. Il faut le virer ce strlen, c'est reservé pour lire la taille des chaines de caracteres terminées par null, pas pour les buffers.
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 26 juil. 2003 à 00:46
Tu as raison, c'est bien les strlen ki merdait !!!! J'ai mi 1024 a la place (et pas 1), et ca marche nikel ! Merci !!!!!!!!! (^_^)
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 26 juil. 2003 à 01:13
Ne t'inkiete pas pour ca, le fait de ne pas savoir combien d'octet ya exactement dans le buffer ne fait qu'arrondir la taille de mon fichier au Ko supérieur, ce n'est vraiment pas trè important et le fichier marche toujour donc....
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 26 juil. 2003 à 01:23
Salut,
Et oui c'est ca qui me tracassais, et si c'etait le cas ton fichier ne marcherais pas.
En fait tu envois toujours 1024 octets meme lors du dernier envois (qui ne contiens surement pas 1024 octets). Mais lorsque tu reconstitue le fichier, tu t'arrete d'ecrire le paquet de 1024 octets lorsque tu as atteind la limite TAILLE du fichier de depart. Donc les 2 fichiers source et cible ont en théorie avoir la meme taille a l'octet pret.