Socket

Résolu
Signaler
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005
-
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005
-
Excuser moi,bonjour.J'ai un leger problem avec les sockets.
kan je te recupere les données d'un fichier zipé sur un serveur,a l'ouverture de ce fichier,on le dit k'il est corrompu.
De plus,j'ai remarquer kil est differement du fichier d'origine.
Quelkun pourrait til maider svp.

CASPER

10 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Pas exactement, disont que quand tu recois la reponse http, tu as la taille du fichier, et cette taille peut te servir a controler si la taille des données que t'a envoyé le serveur est correcte.
Tu n'est pas obligé de le faire, mais je trouve que c'est une sécurité.

Aussi je pense que tu devrais utiliser un buffer de reception plus grand (plusieurs Ko).
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Comment veux-tu qu'on t'aide, tu n'a pas posté une ligne de code...
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005

Voici mon code,dzl:
GET /users/b.guilhaume@kia.fr/Kia_stats_provisoires_vpn.ZIP HTTP/1.0 \nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,application/x-shockwave-flash,*/* \nReferer:http://serv.aaa.asso.fr/users/b.guilhaume@kia.fr/Kia_stats_provisoires_vpn.ZIP \nAccept-Encoding:x-gzip, deflate \nhost:serv.aaa.asso.fr \nConnection:keep-Alive\n\n"

connect(sd1,(SOCKADDR*)&sinDistant,sizeof(SOCKADDR_IN));
send(sd1,requete,strlen(requete),0);
f=fopen("ok.ZIP","w+b");
while((ByteRecv=recv(sd1,tampon,4,0)!=0))
fwrite(&tampon,sizeof(char),4,f);
fclose(f);

Voila,et kan je souhaite lire mon "ok.zip",il me dit kil est corompu et j'ai remarquer kan je le techarge depuis internet explorer,pour verifier si les donné sont idem,ben c legerement differement,je pense ke sa mon problem!

mercie pouir votre et desoler aardman

CASPER
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
Apres que tu ai envoyé ta requetes, tu écris tout ce que tu recois directement dans le fichier... sans enlever la reponse http du serveur. Il faut commencer a écrire apres avoir recu et traité la reponse http (car contient la taille exacte du fichier téléchargé).
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005

Ben justement peut tu me doner un peu la syntaxe,car moi g fè ainsi,mais elle ne ma pa l'air optimiset et coherente.si tu a meiux,ecrit la moi stp,car je joue trop sur la taille de tampon,sa menerve..merci

//ici c le bloc d'en tete,ki n'est pa copier
send(sd1,requete,strlen(requete),0);
recv(sd1,tampon,268,0);

f=fopen("ok.ZIP","w+b");

while((ByteRecv=recv(sd1,tampon,4,0)!=0))
fwrite(&tampon,sizeof(char),4,f);

CASPER
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
L'entete n'est pas de taille fixe, elle est terminée par un \r\n\r\n.
Donc une fois que tu as envoyé ta requete, tu écris tout ce que tu recois dans un buffer tant que tu n'a pas recu le \r\n\r\n, puis tu analyse le buffer pour trouver la taille de fichier (je pense que c'est indispensable) et enfin a partir de la tu écris tout ce que tu recois dans le fichier.
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005

aardman,je te remercie de bien vouloir m'aider,,mais franchement j'orai du mal a faire la syntaxe,tu vois c la fin de programme,sinon tout fonctionne et en plus c pour un stage.
Stp,sa ne serait pa possible ke tu me passe la syntaxe stp.
Sinon g pa trob bien compris kantu le dis ke janalyse le buffer.
merci

CASPER
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
C'est pas trop mon style de coder pour les autres, désolé.
Sinon par "analyser le buffer", je voulais dire qu'il fallait extraire les infos qui t'interessent du buffer qui contient la reponse http, c'est a dire: la taille du fichier, et le numéro de réponse du serveur (200 si tout va bien).
Dans mon prog "telecharger un fichier" present sur ce site, c'est la fonction ParseHeaderHttp() qui analyse la reponse du serveur http.
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005

Avant de cloturer se sujet,je recapitule,cke tu ma dis.
dans ma premiere reception ,tant ke tampon est different de \r\n\r\n,je copie dans un buffer ce ke je recois,puis je preleve la taille du fichier.
Je refais un nouvelle reception en precisant maitenant,la taille du fichier kom buffer,, c ca?
CASPER
Messages postés
93
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
30 mai 2005

ok mercie de to aide

CASPER