begin process at 2012 05 28 21:35:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

envoyer un fichier binaire dans une socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

envoyer un fichier binaire dans une socket

vendredi 16 septembre 2005 à 09:38:16 | envoyer un fichier binaire dans une socket

ebooserge

salut a tous,
j'ai posté un précédent message sur un sujet similaire mais j'ai pas eu d'explication comprehensible.
voila je suis en train de realiser un serveur http et j'arrive pas a transmettre tout ce qui est binaire au navigateur.
pour les fichiers texte(html, txt ...) aucun pb: j'utilise les fonction createfile, readfile et closehandle de winsock2 pour recuperer le contenu du fichier, le mettre dans un buffer et transferer le contenu au navigateur via une socket.
j'ai une boucle qui capte toutes les requetes du navigateur. lorsque j'envoie une page html vide avec juste une image en background, le navigateur m'envoie 2 requetes:
- la 1ere pour la page html
- la 2e pour l'image jpeg d'arriere plan.
pour la 2e requete, le navigateur reste bloqué sur en attente de la reponse. donc en gros mon navigateur ne lui envoie pas la photo en binaire.
donc voici ma question: comment ouvrir un fichier binaire (en lecture bien sur) et le transferer dans une socket au navigateur avec les fonctions createfile et readfile ? quels sont les flags a specifier ? si cela semble plus aisée avec une autre api, je suis aussi preneur.
merci de vos reponses
vendredi 16 septembre 2005 à 10:00:20 | Re : envoyer un fichier binaire dans une socket

Arnotic

Administrateur CodeS-SourceS
Comme normal : hfl = CreateFile("monfichier.jpg", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);

Et après ReadFile, ...

@+
Arnotic,
Admin CS,
Développeur chez Néos SDI,
MVP Visual C++
vendredi 16 septembre 2005 à 10:17:16 | Re : envoyer un fichier binaire dans une socket

ebooserge

je te remercie de ton apport mais c'est deja ce que je faisais mais a la suite du CreateFile("monfichier.jpg", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0), lorsque j'eesaie de recuper la taille du fichier pour la mettre dans l'entente HTTP Content-Length,
 il me retroune -1 avec la fonction tailleFichier = GetFileSize(file,NULL);
et pourtant la page html il me retourne bien la bonne taille (1072 pour ma page de test).
donc si la taille est a -1, soit il n'arrive pas a  ouvrir  le jpeg, soit je ne specifie pas les bons flags. c'est pkoi reste en attente car il ne recoit pas la photo de mon serveur .... le buffer qui lui est envoyé est vide ...

GRRRRR je vais m'arracher les cheveux
j'ai deja une calvitie naissante

PLIZ HELP


vendredi 16 septembre 2005 à 10:22:29 | Re : envoyer un fichier binaire dans une socket

DeAtHCrAsH

Mets le bout de code qui ouvre le fichier et recupere la taille ici qu'on puisse t'aider.
vendredi 16 septembre 2005 à 10:24:10 | Re : envoyer un fichier binaire dans une socket

Arnotic

Administrateur CodeS-SourceS
Oui,
De plus pour vérifier l'ouverture du fichier il faut faire : if(hfl != INVALID_HANDLE_VALUE)
De cette manière tu pourras voir si ca vient de l'ouverture du fichier.

@+
Arnotic,
Admin CS,
Développeur chez Néos SDI,
MVP Visual C++
vendredi 16 septembre 2005 à 11:11:42 | Re : envoyer un fichier binaire dans une socket

ebooserge

c'est vrai.
en verifiant le handle il est bien valide et je recupere a present la taille du fichier mais maintenant il envoie du binaire au navigateur.
voici ce qu'il envoie au navigateur:  ÿØÿà  
et voici un apercu du code:

file = CreateFile(url, GENERIC_READ, 0,0,OPEN_EXISTING, 0,0);  
  if(file == INVALID_HANDLE_VALUE)
     MessageBox(NULL,"il n'ouvre rien du tout",NULL,MB_OK);
  tailleFichier = GetFileSize(file,NULL);
  octet = new char[tailleFichier+1];
  reponse = new char[tailleFichier+1024];
  ReadFile(file,octet,tailleFichier,&nbOctetsLus,NULL);
  CloseHandle(file);
  if(strcmp(typeFichier, "jpg")==0)
      strcpy(reponse, "HTTP/1.0 200 OK\nContent-Type: image/jpeg\nContent-Encoding: gzip,deflate\n\n\n");
if((strcmp(typeFichier, "htm")==0)||(strcmp(typeFichier, "html")==0))
      strcpy(reponse, "HTTP/1.0 200 OK\nServer: MonServeur 1.0\nContent-Type: text/html\n\n");     

         send(acceptSocket,reponse,tailleFichier+1024,0);                 
         delete[] octet;
         delete[] reponse;
         delete[] requete;
         delete[] url;
         delete[] sschaine1;
         delete[] sschaine2;
         closesocket(acceptSocket);     

tout ce code est contenu dans la boucle de reception des requetes
la variable taille fichier recoit bien 1072 pour la 1e requete et 167010 pour la seconde requete donc il ouvre bien le fichier jpeg.
mais il envoie des hieroglyphes au navigateur
vendredi 16 septembre 2005 à 11:33:46 | Re : envoyer un fichier binaire dans une socket

Arnotic

Administrateur CodeS-SourceS
Vérifie que ta fonction send fonctionne bien.
Car si tu envois trop de données d'un coup elle peut échouer.

@+
Arnotic,
Admin CS,
Développeur chez Néos SDI,
MVP Visual C++
vendredi 16 septembre 2005 à 11:45:06 | Re : envoyer un fichier binaire dans une socket

ebooserge

le fichier jpeg contient en fait 163810 octets (getfilesize)et en recuperant la valeur de la fonction send par
int i = send(acceptSocket,reponse,tailleFichier+1024,0);     
il m'affiche 164834 octets. donc il envoie bien le fichier et l'entete http.
je faisais avec firefox et c'est pareil avec IE. il affiche toujours des hieroglyphes
vendredi 16 septembre 2005 à 11:50:14 | Re : envoyer un fichier binaire dans une socket

Arnotic

Administrateur CodeS-SourceS
Dans le code que tu as posé, ou envois-tu "octect" qui contient les données du fichier ? Je ne vois qu'un send pour "reponse".

@+
Arnotic,
Admin CS,
Développeur chez Néos SDI,
MVP Visual C++
vendredi 16 septembre 2005 à 11:52:51 | Re : envoyer un fichier binaire dans une socket

DeAtHCrAsH

tailleFichier+1024 <<< T'es sure que ton entete fasse cette taille ? Normal que tu es des hieroglyphes, la socket de l'explorateur va lire trop loin dans le buffer de récéption. Il faut qur tu mettes la tailles exactes de ta requets, et non pas la taille du fichier + 1024. Puis d'ailleurs pourquoi 1024 ?

Le troisième parametre de la fonction send correspond a la tailles des données contenu dans le buffer, et non pas la taille du buffer!!!!

Tu dois donc lui passer la taille réelle de ta requetes et non pas la taille du buffer (taillefichier + 1024)!.

Soit:

send(acceptSocket,reponse,strlen(reponse),0);


Essaye dont...

1 2 3

Cette discussion est classée dans : fichier, binaire, html, navigateur, socket


Répondre à ce message

Sujets en rapport avec ce message

Lire et ecrire dans un fichier en mode binaire [ par vbnul ] Je cherche comment lire et ecrire dans un fichier en mode binaire car on ne peut lire certains "caracteres" binaires dans les EXE par exemple.qqn pour recuperer une page html en c++ [ par langedechu ] je me demandais si on pouvais recupérer un page html a l'aide de des socket ( send + recv ).Si oui comment fait-on et sur quel port on doit configurer telecharger un fichier [ par Xs ] On fait comment pour telecharger un fichier ?je suppose qu'il faut demander au serveur de l'ouvrir en binaire puis utiliser une boucle du typewhile(!f imprimer un fichier html avec insertion d images... [ par nebucad ] Bon jour a tous et a toutesJe devai imprimer des fichiers word et un fichier html sous win qui a deuw images inserees.Je lance un ShellExecute de cett Pb Fichier Html Help .chm [ par crocejf2000 ] Salut a tous,J'ai créé un fichier d'aide .chm qui fonctionne tres bien quand on double click dessus, il s'ouvre. Mais quen je l'appel de mon prog, il Envoyer et recevoir un fichier par Socket en C [ par coolboy78 ] Bonjour,j'aimerai Envoyer et recevoir un fichier par Socket en C. Mais je n'ai pas trouvé de fonction ni d'exemple pour ceci.Si kelkun pouvez maider, raw (urgentissimo) [ par helena123 ] salut les loulous,Je dois écrire un programme qui lit un fichier de type raw.On me dit que le fichier de type .raw est de type binaire et contient l'i Lecture de fichier binaire structuré [ par nico20000 ] Bonjour,j'ai besoin de lire dans un fichier binaire dont l'entête ressemble à ceci: (traduite en hexa)Properties gc90063 num FTPLocal le 17/11/2003Je fichier binaire [ par Kywalh ] Salut,comment fait on pour ecrire un tableau de nombres en binaires de 2 colonnes dans un fichier en ayant la meme disposition (cad 2 colonnes) ???Du comme un formulaire html [ par ieee ] ieeeje cherche a imprimer(ca c'est fastoche) + ajouter dans un fichier texte a chaque fois sans effacer le contenu precedant(ha ha..) le resultat d'un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales