Envoyer un fichier par sockets

Signaler
Messages postés
161
Date d'inscription
samedi 25 juin 2005
Statut
Membre
Dernière intervention
1 août 2006
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
salut !!

comment envoyer un fichier FILE*fichier par sockets ?

ça sera simpa si on me donne un petit exemple

merçi d'avance ,
A++

8 réponses

Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Hum je dirais en récupérant la taille du fichier, puis faire une boucle du genre :



while (taile--)

{

ReadFile(fichier,data,512,&read,NULL)

send(socket,data,512);




}



et dans celui qui recoit:



while(taile--)


{



recv(socket,data,512);



WriteFile(fichier,data,512,&w,NULL))


}
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
1
Aussi, tu peux utiliser les fonctions std (pour FILE * file) au lieu des apis windows.
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Pas de boucle comme ca ! Puis ce que tu as la taille du fichier :

DWORD dwSize;
char *szBuf;

...
dwSize = GetFileSize(hfile, 0);
szBuf = HeapAlloc(hHeap, 0, dwSize + 1);
ReadFile(hfile, szBuf, dwSize, &dwRead, 0);
szBuf[dwSize] = 0;
send(socket, szBuf, dwSize);

...

+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Attention par contre si dwSize > 8 ko ! Dans ce cas, lire 8 ko par 8 ko...etc

+2(p - n)
Messages postés
161
Date d'inscription
samedi 25 juin 2005
Statut
Membre
Dernière intervention
1 août 2006

merçi pour l'idee cepandant j'ai deux petites questions ,pourquoi tu n'as pas

mis new ou malloc au lieu de HeadAlloc ? le hHeap est il un Handle declaré

justement pour etre utilisé dans cette fonction ?

A++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
AlexMAN, on fait donc une boucle dans le cas général. Et pourquoi tu donnes 8ko comme limite, c'est toi qui choisis?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
C'est une limite de taille des messages que l'on peut envoyer (si je me souviens bien == a 8ko). A recuperer avec getsockopt() SO_MAX_MSG_SIZE.
Et pour ce qui est de la boucle, je suis d'accord, mais regarde la boucle de zootella...Il lit 512 octets, mais ne reduit la taille que de 1 octets, donc la va y avoir pb..

+2(p - n)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Oui j'avais vu