IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Simple Server Http et envoi d'image


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 11
    Points : 14
    Points
    14
    Par défaut Simple Server Http et envoi d'image
    Bonjour,
    Je sollicite votre aide pour un petit (grand?) problème pour l'envoi d'image lorsque le "client" me le demande ...

    Actuellement mon serveur http, est un simple socket qui ecoute sur le port 80, qui recoit des requette http tel que "GET / HTTP1.1\r\n", ...
    et je lui renvoi une page HTML ensuite, dans la page HTML il y'a une <img src="monFichier.png"> qui fait le client renvoi une autre requête pour me demander cette page et je la lui renvoi.

    Envoyer au client du texte (css,javascript,html) ne pose pas vraiment de problème, mais je n'arrive simplement pas à lui envoyé une image.

    Merci d'avoir lu, en espérant que pourrez m'aider à résoudre ce problème.

    Ci dessous une archive contenant 5 fichier:
    1. main.cpp
    2. ServerWebRasp.h
    3. ServerWebRasp.cpp
    4. index.html
    5. hello.png

    PandiPanda.rar

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Salut,

    la différence entre une image et du texte ? aucune!
    Il te demande une image, tu lui renvois le buffer qui lui permet de l'afficher. Généralement il suffit de faire un open et read.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    Cependant cela ne fonctionne pas ^^

    Voici mon code pour lire un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    std::string ServerWebRasp::readFile(std::string pathFile){
    	char contenu_fichier[1024];
    	FILE *fichier = fopen (pathFile.c_str(), "rb");
    	std::string res = "";
    	if (fichier != NULL)
    	{
    	  while (fgets(contenu_fichier, sizeof (contenu_fichier),fichier) != NULL)
    	  {
    		res += contenu_fichier;
    	  }
    	  fclose (fichier);
    	}
    	return res;
    }
    pour l'envoi vers le client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void ServerWebRasp::sendHelloHtml(){
    	std::string sResponse = "";
    	sResponse  += "HTTP/1.1 200 OK\r\n";
    	if(!this->image){
    		sResponse  += "Content-Type : text/html\r\n"; // text
    	}else{
    		sResponse  += "Content-Type : image/png\r\n"; // si image png
    	}
    	std::string file = readFile(this->pathFile);
    	int size = strlen(file.c_str());
    	sResponse  += "Content-Length:"+std::to_string(size)+"\r\n"; // taille du fichier a envoyé
    	sResponse  += "\r\n"; // on a finis le header
    	sResponse  += file; // ici c'est le "body"
    	write(this->sockClient,sResponse.c_str(),strlen(sResponse.c_str())+1); // envoi tout ca (header+body)
    }

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Ne surtout pas utiliser strlen pour trouver la taille d'un fichier en octets contenant une image avec plein d'octets "0x00" dedans.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Surtout strlen(uneStringCpp.c_str()) quand on peut faire uneStringCpp.length().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    En effet maintenant ça fonctionne sans utilisé le strlen() et en calculant bien le nombre de caractère (0x00 compris).
    Stupide de ma part.
    Merci bien '^^

  7. #7
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je suis très surpris que ça marche. Si ton image contient un octet à 0, normalement, ça ne marche pas.

    De manière générale, tu ne peux utiliser un std::string que losque tu traites du texte. Si tu traites des données binaires, un vector<char> sera plus adapté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi d'images par requête HTTP : Index Out Of Range
    Par Imperium7 dans le forum Réseau
    Réponses: 0
    Dernier message: 01/05/2015, 17h31
  2. [iOS 4.x] Envoi d'image via requête http a un serveur distant
    Par salma.mathlouthi dans le forum Objective-C
    Réponses: 0
    Dernier message: 26/10/2012, 16h28
  3. Réponse HTTP pour l'envoi d'image
    Par Cuicui45 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 4
    Dernier message: 18/04/2008, 12h43
  4. [MySQL] Envoi d'images par formulaire et post-traitement
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/04/2006, 13h58
  5. [MySQL] Envoi d'image ds ma base ?
    Par arti2004 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/02/2006, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo