Se connecter / S'enregistrer
Votre question

les sockets et les fichiers binaires en c++

Tags :
  • Serveur
  • Programmation
Dernière réponse : dans Programmation
15 Septembre 2005 17:24:51

salut a tous,
voila j'essaie de creer un serveur http pour l'envoi de pages web pour m'entrainer un peu aux sockets.
j'ai fait une petite boucle qui capte toutes les requetes qui viennent du navigateur. pour ce qui est de l'affichage de pages html simples(que du texte sans rien d'autres) la il ya aucun pb le navigateur affiche bien la page que je lui envoie.
mais lorsqu'a cette meme page je lui rajoute en background une image jpeg par exemple, le navigateur m'envoie bien sur 2 requetes:
- la 1e pour me demander la page, et il la recois bien
- la 2e pour me demnder la photo qu'il doit afficher en background.
et c'est la pb car en fait j'aimerais savoir puis je faire pour envoyer du binaire (la photo) dans une socket ?
je sais juste qu'il faut inclure l'entete Content-Type: image/jpeg dans la reponse a la 2e requete mais que mettre dans le corps de la reponse pour eviter d'avoir ce que j'ai actuellement, a savoir une serie de petit carré et de losange a la place de la photo?

merci de vos reponses ...

Autres pages sur : sockets fichiers binaires

a b L Programmation
15 Septembre 2005 19:21:50

Je crois (pas sûr) qu'il faut la transcoder en caractère ASCII.
15 Septembre 2005 19:25:07

Il faut utiliser ta fonction de lecture de l'image (par exemple fread) en mode binaire (changer le flag du fopen) et lire bit par bit, en affichant pareil en mode binaire.

edit : je suis sur que ca marche, j'ai déja codé un petit serveur en ocaml. Par contre, je connais pas la fonction C la mieux appropriée pour faire ca.
Contenus similaires
a b L Programmation
15 Septembre 2005 19:50:16

Pour ouvrir le fichier et le lire en binaire c'est bien ça, mais il faut le convertir en format MIME pour n'envoyer que des caractères ascii pour ne pas interférer avec le protocole de communication (on risque, en binaire d'envoyer des commandes...)
EDIT: mais comme je ne suis pas sûr que ce soit pour les serveur HTTP ou un autre, il faut vérifier :-D
sinon pour les sockets tu utilise quoi ? (car ça dépend du système et/ou bibliothèque).
15 Septembre 2005 20:04:23

je suis sous XP et j'utilise winsock2.
pour la lecture l'ouverture et la lecture des fichiers html, j'utilise createfile, readfile et closehandle inclus dans fstream.
mais c'est vrai que j'ai pas essayé avec fread de stdio.
a b L Programmation
15 Septembre 2005 20:16:36

Non c'est bon tu utilise les fonctions de la win32API, les autres sont des standards, mais c'est pareil.
je pense que ça confirme ce que je dis: il ne faut pas envoyer du binaire mais du binaire "transformé".
Si tu peux regarde ce qui est envoyé et ce qui est reçu.
15 Septembre 2005 20:37:55

en fait justement quand je regarde sur le navigateur, il affiche d'abord les differents textes contenus entre les balises body et en dessous il ecrit des carrés, des losanges, des tremas un peu comme s'il voulait lire du binaire comme du texte.
pour info voici comment je fais l'ouverture de fichier (html ou autre):
- file = CreateFile(url, GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-ReadFile(file,octet,tailleFichier,&nbOctetsLus,NULL);

j'ai regardé dans msdn et je sais pas trop quel flag mettre pour lui demander de faire une lecture du fichier url byte par byte et non pas une lecture sequentielle.
15 Septembre 2005 23:23:11

tu veux pas utiliser une bonne librairie portable, comme libcurl ?
16 Septembre 2005 00:54:22

je connais pas du tout mais je suis ouvert a toute proposition.
ya de la doc dessus ? une source serait ideale
16 Septembre 2005 01:09:11

ok je te remercie je vais jeter un coup d'oeil demain et je m'en inspirerai. ce soir je suis trop naze. salut
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS