Accueil > Forum > > > > Probleme wsock protocole HTTP
Probleme wsock protocole HTTP
samedi 28 juin 2008 à 23:11:14 |
Probleme wsock protocole HTTP

Target67
|
Alors je veux faire une petite appli qui permet de télécharger des fichiers sur le net suivant le protocole HTTP dont voici le code de la partie qui va chercher le fichier: void getfile(SOCKET sock,SOCKADDR_IN sin,char* file){ FILE * infile; infile = fopen(file,"wb"); char* mes = new char[255]; char* buffer = new char[1024]; int byteget; bool header = false; char* buf2; connect(sock,(SOCKADDR *)&sin,sizeof(sin)); sprintf(mes,"GET /home/patcher/%s HTTP/1.0\r\nConnection: close\r\n\r\n",file); send(sock,mes,strlen(mes),0); while((byteget = recv(sock,buffer,1024,0)) > 0 ){ if( !header ){ buf2 = strstr(buffer,"\r\n\r\n") + 4; fwrite(buf2,byteget - (buf2-buffer),1,infile); header = true; }else{ fwrite(buffer,byteget,1,infile); } } shutdown(sock,2); fclose(infile); } Je l'utilise dans une boucle dans laquelle je rentre un nom de fichier a télécharger, ça marche parfaitement la première fois (fichier complet sans soucis) mais si je lance un 2e téléchargement ensuite, celui-ci me donne un fichier vide... Merci de bien vouloir m'aider ^^
|
|
dimanche 29 juin 2008 à 10:22:31 |
Re : Probleme wsock protocole HTTP

jfrancois
|
Bonjour, Peut-être parce qu'il manque les delete qui doivent aller avec les new ? Jean-François
|
|
dimanche 29 juin 2008 à 12:02:21 |
Re : Probleme wsock protocole HTTP

Target67
|
Merci de ta réponse.
Non j'ai essayé a tout hasard, mais j'avais déjà commencé d'autres versions où l'allocation de mémoire était faite avant itération (donc aucune necessité de delete entre chaque itération).
Je tiens aussi a préciser qu'en faisant des tests similaires avec le protocole FTP (en exécutant les instructions correctement) j'arrivais aussi a downloader un premier fichier mais pas un deuxième...
Ma question serait de savoir si une fois le socket fermé, il faut le réinitialiser d'une manière quelconques ou quoi? ...
|
|
dimanche 29 juin 2008 à 17:14:03 |
Re : Probleme wsock protocole HTTP

aardman
|
Salut, Commence surtout par traiter les erreurs des fonctions winsock et d'afficher des messages en conséquence: ta fonction n'affiche rien, ne log rien, ne retourne rien: a moins d'etre devin c'est impossible a debuger. A mon avis, c'est le deuxieme connect() qui échoue, je pense pas qu'on puisse réutiliser un socket de cette maniere (même apres un shutdown). Ensuite, y'a d'autres problemes, comme la fuite de mémoire signalée par jfrancois, mais plus grave a mon avis, c'est le "strstr(buffer,"\r\n\r\n")": le serveur n'envoie pas de chaine terminée par 0, donc on peut pas utiliser strstr. Autre problême mineur, que se passe-t-il lorsqu'on ne recoit qu'une partie de la réponse lors du premier recv() ?
|
|
dimanche 29 juin 2008 à 19:18:07 |
Re : Probleme wsock protocole HTTP

Target67
|
Merci pour ta réponse, il faudrait en effet que je soit un peu plus rigoureux lorsque je code et des récups d'erreurs ne font jamais de mal...
En ce qui concerne la fuite de mémoire, je l'ai réglé suite au message de jfrancois, en ce qui concerne le strstr il marche très bien (je comprend pas ce que tu veux dire par la), je l'utilise pour virer le header de la réponse du serveur HTTP au niveau des recv il gère tres bien les réponse au dela de la taille du buffer (j'ai envoyé au travers un fichier de 1Mo dont j'ai verifié le checksum), la boucle sert à ça...
Sinon lorsque je mes un récup d'erreur à la deuxieme tentative il me sort un code d'erreur 10056 >> Socket is already connected.
Que faudrait-il que je fasse? passer par des pointeurs et effacer les socket a la fermeture?
|
|
dimanche 29 juin 2008 à 22:45:03 |
Re : Probleme wsock protocole HTTP

aardman
|
Réponse acceptée !
Salut, j'ai bien compris a quoi servait le strstr(), mais comme son nom l'indique c'est une fonction qui s'applique sur des chaines de caracteres uniquement, pas sur des données brutes que tu recois avec recv(). Pour le socket, il faut en recreer un nouveau pour chaque connexion (socket(), closesocket()).
|
|
lundi 30 juin 2008 à 21:22:07 |
Re : Probleme wsock protocole HTTP

Target67
|
Merci beaucoup, ça marche maintenant...
Pour ce qui est de la question du strstr, il est necessaire que ce soit une chaine uniquement car c'est le caractère \0 qui arrête la recherche non? dans mon cas j'ai choisi plutôt que de bidouiller avec des memcmp et memchr de rajouter un caractère \0 a la fin de la chaine et de faire coller le recv de façon à ce qu'il n'écrive pas par dessus ce dernier caractère, ce qui donne avec toutes les modifs:
void getfile(SOCKADDR_IN sin,char* file){ char* mes = new char[255]; char* buffer = new char[1025]; buffer[1024] = '\0'; int byteget; bool header = false; char* buf2;
SOCKET sock;
sock = socket(AF_INET,SOCK_STREAM,0);
if(connect(sock,(SOCKADDR *)&sin,sizeof(sin))==SOCKET_ERROR){ Affsockerror(); }else{ FILE * infile; infile = fopen(file,"wb");
sprintf(mes,"GET /home/patcher/%s HTTP/1.0\r\nConnection: close\r\n\r\n",file);
send(sock,mes,strlen(mes),0);
while((byteget = recv(sock,buffer,1024,0)) > 0 ){ if( !header ){ buf2 = strstr(buffer,"\r\n\r\n") + 4; fwrite(buf2,byteget - (buf2-buffer),1,infile); header = true; }else{ fwrite(buffer,byteget,1,infile); } } closesocket(sock); fclose(infile); } delete(mes); delete(buffer); }
Merci encore pour votre aide a tous les deux ^^
|
|
Cette discussion est classée dans : buffer, http, char, sock, infile
Répondre à ce message
Sujets en rapport avec ce message
SVP besoin d'aide [ par seito ]
[size=5] seito [/size]j'ai déveloper une apploication pour transferer des fichiersla reception est parfaite pourtant à l'envoie ça me cause des tas de
Probléme pour lire le buffer au lancement de la connexion [ par logant83 ]
Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell
buggage [ par logant83 ]
Bonjour, voila enfaite je suis sous devc++ et je code un service irc et je sais pas ce qui se passe, de temp en temp window m'envoy une erreur comme k
Recuperer contenu requete http [ par fredsor ]
Bonjour, Je voudrais me connecter a mon serveur local afin de recuperer le contenu par exemple d'un fichier txt.Grace a un code trouvé sur le site, j'
Requete HTTP POST MIME - Upload de fichier [ par SuperChouquette ]
Bonjour, je suis débutant et j'ai créer une fonction pour uploader un fichier sur un serveur php apache via le protocole http et le standard mime.Le p
Erreur fermeture ifstream [ par xeon666 ]
Voila mon probleme : Je lit un fichier séquentiellement et quand j'arrive a la fin ou que j'ai trouve ce que je désire, je sort de ma boucle ferme et
Socket Requette HTTP Post - Enlever le header de la réponse [ par SuperChouquette ]
Bonjour, je suis débutant et à l'aide d'autres sources j'ai créer une fonction pour envoyer une requete POST à un serveur web, celle-ci fonctionne bie
verification de code [ par dyroj ]
salut a tous,je voudrai savoir si il y a des faute au niveu de la fonction select() et si je suis obliger de metre sock+1 au lieu de sock dans se peti
analyseur lexical pascal [ par perrotta ]
Bonjour, dsl pour ma langue je parle pas bien le français; je suis entrin de devlopper un analyseur lexical pour un programme (pascal) prèci ,et j'ai
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|