Tom's Guide > Forum > Programmation > les sockets et les fichiers binaires en c++

les sockets et les fichiers binaires en c++

Forum Programmation : les sockets et les fichiers binaires en c++

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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 ...

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Je crois (pas sûr) qu'il faut la transcoder en caractère ASCII.

Répondre à CRicky

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.

Répondre à bluedylc

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).

Répondre à CRicky

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.

Répondre à theboy

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.

Répondre à CRicky

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.

Répondre à theboy

tu veux pas utiliser une bonne librairie portable, comme libcurl ?

Répondre à bluedylc

je connais pas du tout mais je suis ouvert a toute proposition.
ya de la doc dessus ? une source serait ideale

Répondre à theboy

ok je te remercie je vais jeter un coup d'oeil demain et je m'en inspirerai. ce soir je suis trop naze. salut

Répondre à theboy
Tom's Guide > Forum > Programmation > les sockets et les fichiers binaires en c++
Aller à :

Il y a 350 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens