Envoi de fichier par socket

Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 - 25 juil. 2003 à 22:40
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 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

10 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
25 juil. 2003 à 23:50
Salut,
Tu recois le fichier .exe mais quand tu l'execute il ne marche pas ou bien tu ne le recois pas du tout ?
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 juil. 2003 à 00:18
Salut,
Essaye de remplacer le strlen(buf2) dans
send(Client,buf2,strlen(buf2),0);
par la valeur que fread retourne.
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 juil. 2003 à 00:39
Arf attend c'est moi qui me suis trompé, j'ai confondu avec read.
Y'a aucun moyen de savoir le nombre exact d'octets ecrits dans buf2 par fread ?
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
26 juil. 2003 à 00:52
cool :)
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
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
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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.
0
Rejoignez-nous