begin process at 2012 05 29 12:46:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???


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

Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

vendredi 8 avril 2005 à 20:49:11 | Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

bravcharlie

Je suis en train de faire un serveur html, celui ci fonctionne correctement
lorsqu'il faut envoyer des pages de texte html, mais lorsque je met une photo
dans la page html celle ci n'est pas chargé.
Pourriez vous m'expliquer pourquoi et corriger mon code.
Meci beaucoup; voici mon code entier:


/* programme Serveur
   Alloue un socket
   puis en boucle
 1) attend une nouvelle connexion du client
    2) envoie un message court au client
 3) ferme la connexion
   fin boucle
  
  Syntaxe :  serveur [port]
  port numéro de port à utiliser (optionnel, par défaut PROTOPORT)
*/

#include <winsock2.h>
#include <stdio.h>j
#include <string.h>

#define PROTOPORT 80
#define QLEN 10

int visits =0;

typedef struct
{
 int taille;
 unsigned char *tab;
}ttrame;

void main(int argc, char ** argv)
{
//struct hostent *ptrh; //pointeur table d'hôtes
struct protoent *ptrp;  // pointeur table de protocoles
struct sockaddr_in sad;  // structure pour adresse serveur
struct sockaddr_in cad;  // structure pour adresse client
int sd,sd2;    // descripteurs de socket
int port;    // numero de port
int alen;
int error;
char  buf[1000];

int nb,i,j; //Nombre de caractères recus
ttrame donnees;
char nompage[127];
char *pChar;
FILE *PAGE;

WORD                 wVersionRequested;


  WSADATA wsaData;

  wVersionRequested = MAKEWORD( 2, 0 );
 
    WSAStartup (wVersionRequested,&wsaData); // initialisation de winsock2.0
  

   memset((char*)&sad,0,sizeof(sad)); //effacer struct sockaddr_in
   sad.sin_family =AF_INET;    //définir famille internet pour la socket du serveur

   /* rechercher l'argument PORT de la la ligne de commande s'il est spécifié
       sinon prendre PROTOPORT */

    if (argc>1)  //si numero de port spécifié au niveau de la ligne de commande
   {
    port = atoi(argv[1]); //conversion de la chaine de caractère en binaire
   }
   else  //protocole par défaut

   {
    port=PROTOPORT;  
   }


   if (port>0) sad.sin_port=htons((u_short)port);  //fonction qui inverse les octets
   else
   {
    printf("numero de port invalide :%s \n",argv[1]);
    exit(1);
   }


    /* Convertir le nom de protocole de transport TCP/IP en n° de protocole */

   if ( ((int)(ptrp=getprotobyname("tcp")))==0)  //fonction qui retourne les informations relatives au protocoel TCP
   { printf("conversion de tcp impossible");
     exit(1);
   }


   /* Créer une Socket */

   sd =socket(PF_INET, SOCK_STREAM, ptrp->p_proto); // création de la socket d'écoute
   if (sd<0)
   {printf("erreur (socket)\n");
    exit(1);
   }

    /* Lier une adresse locale à la socket */

   if (bind(sd, (struct sockaddr *)&sad, sizeof(sad))<0)
   { fprintf(stdout,"erreur (bind) \n");
     exit(1);
   }

   /* spécifier la taille de la file d'attente des requêtes */

   if (listen(sd,QLEN)<0)      // création de la file d'attente associé à la socket d'écoute
   { fprintf(stdout,"erreur (listen)\n");
  exit(1);
   }

   /* Boucle principale (accepter les requêtes et les traiter) */
 alen=sizeof(cad); 
   while(1)
   { 
   if ( (sd2=accept(sd, (struct sockaddr *)&cad, &alen)) <1 ) //acceptation de la connexion, création de la socket de service
   { fprintf(stdout,"accept failed %d \n",sd2);
     exit(1);
   }

   //--------------------------------------------------------------------------------
   nb = recv(sd2,buf,sizeof(buf),0);
   buf[nb]='\0';
   printf("%s",buf);


   //On recupere la page à afficher
 pChar=strstr(buf,"GET /");

 if(pChar==NULL)
 {
  printf("erreur !!!");
  exit(1);
 }
 if(pChar[5]==' ')
 {
  strcpy(nompage,"indexminiservweb.html");
 }
 else
 {
  i=5;
  j=0;
  while(pChar[i]!=' ')
  {
   nompage[j]=pChar[i];
   i++;
   j++;
  }
  nompage[j]='\0';
 }
 PAGE=fopen(nompage,"rt");

 //AU lieu de mettre exit 1 ,On remplace par un message au client et on ne ferme pas le serveur
 if(PAGE==NULL)
 {
  sprintf(buf," Erreur ouverture de fichier. ");
  send(sd2,buf,strlen(buf),0); //envoi du message sur la socket de service
     closesocket(sd2);  

 
 }
 else
 {
  
 //on va à la fin du fichier pour connaitre sa taille
 fseek(PAGE,0,SEEK_END);
 donnees.taille=ftell(PAGE);//donne la taille de la page
 donnees.tab=(char *) realloc(NULL,sizeof(char)*donnees.taille);
 
 //Remplacer pour la version finale par un message genre problème d'allocation, contacter le webmaster...
 if(donnees.tab==NULL)
 {
 
 sprintf(buf," Probleme d'allocation dynamique  ");
 send(sd2,buf,strlen(buf),0); //envoi du message sur la socket de service
    closesocket(sd2); 

 }
 else
 {
 i=0;
 rewind(PAGE);//revient au debut du fichier
 while(!feof(PAGE))
 {
  fread(&(donnees.tab[i]),1,1,PAGE);
  i++;
 }
 donnees.taille=i-1; //modif de la taille à cause de W2K
 if(PAGE!=NULL) fclose(PAGE);
 
 send(sd2,donnees.tab,donnees.taille,0); //envoi du message sur la socket de service

 //  visits++;
// création du message à envoyer
//   sprintf(buf,"    %d contact%s sur ce serveur. ", visits, visits==1?" ":"s");
//   send(sd2,buf,strlen(buf),0); //envoi du message sur la socket de service
    
    closesocket(sd2); //fermeture de la socket de service
 }
 }
   }

}

 

vendredi 8 avril 2005 à 22:40:31 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

minet03

Je n'ai pas lu ton code jusqu'au bout (il est long). J'aimerai savoir quelques trucs. Est ce que tu envoi ton image en même temps que la page (même connection) ? Si c'est le cas, il faut savoir que le serveur HTTP ne renvoi que ce que l'on lui demande. Ce n'est donc pas à lui de fouiller dans le page pour trouver ce qu'il doit envoyé en plus.
Si ce n'est pas le cas là, je regarderai plus en détails le code demain.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
samedi 9 avril 2005 à 11:50:53 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

bravcharlie

Non je n'envoie pas l'image en meme temps que la page HTML, je l'envoie juste apres.
Par contre je pense qu'elle utilise la meme connection, mais je ne vois pas le probleme pour la connection. Merci.

samedi 9 avril 2005 à 11:59:36 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

minet03

Il me semble que le serveur HTTP fonctionne comme ci :
- recoit une requète de la part d'un navigateur (ouverture de la connection)
- envoi la page demander dans la requète (toujours dans la même connection)
- une fois la page envoyer, fin de la connection
Si il y a des images dans la page html envoyée, le navigateur renverra une requète pour que le serveur la lui envoi de la même manière qu'au dessus.
C'est la connection qui détermine la fin de fichier, le navigateur n'est pas connecter tout le temps au serveur, il se connecte que pour demaner quelque chose.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
samedi 9 avril 2005 à 23:57:48 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

bravcharlie

Alors si je comprend bien, normalement le navigateur distant me demande une page , je lui envoie (repond a ca requete) et ferme la connection. Et si une photo est presente dans la page, le navigateur distant va me renvoyer une requete pour que je lui envoie la photo. Mais d'apres mon programme c'est bien ce que je fais mais ca ne fonctionne pas. faudrait il alors que je scanne la page qu'il me demande pour voir si une photo est present et lui envoie en meme temps, dans la meme connection que la page demander???  (Merci pour les reponses rapide c'est sympa!)
dimanche 10 avril 2005 à 01:02:50 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

minet03

De rien pour les réponses rapides, on est là pour ça.
Cela dit, je trouve (c'est un opinion perso) que ton code et mal fait, tu devrais créer plus de fonctions que tu appelleras dans le main. Là on s'y perd un peu. Ensuite afficher (ou fait un log) des requêtes (et des connections), ça te permetera de voir un peu se qui se passe au niveau du serveur. Et avec un peu de chance tu verras pourquoi les photos ne s'envoi pas.
Au fait, je n'ai pas trop prêté attention, mais envoi tu correctements les réponse au requête (entête, typemine,...) ? Le prob viens peut etre de la aussi.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
dimanche 10 avril 2005 à 01:06:54 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

minet03

Pour t'aider un peu mieux dans ta quête : http://www.salemioche.com/http/
Cela pourra grandement t'aider

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
dimanche 10 avril 2005 à 20:23:17 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

bravcharlie

Merci pour le site, il etait interressant. Par contre je n'ai pas trouver de solution pour mon probleme mais merci encore. je vais encore cherché car je ne vois vraiment pas ce qui ne va pas. Bref merci pour tous.

lundi 11 avril 2005 à 10:40:23 | Re : Mon Serveur HTML n'envoie pas les images jpg contenu dans la page???

minet03

tu devrais essayé de télécharger l'image avec le navigateur en la mettant dans la barre d'adresse.
Et voir si il la télécharge. Et me du code pour afficher les requêtes entrantes. Ainsi tu verra si l'image est demandée.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite


Cette discussion est classée dans : port, page, socket, buf, sd2


Répondre à ce message

Sujets en rapport avec ce message

pb de socket [ par ed53 ] je voudrais que plusieurs applications qui se connecte et garde la connection sur le meme port.faut il que je crée plusieurs sockets et que je les bin [SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur Socket, quand tu nous tiens ... [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur Création d'une socket .. [ par bubbless ] Bonjour !à l'aide !! J'ai programmé tout un systèle réseau / client, que j'ai enfin pu tester grâce à l'aide d'une âme charitable sur ce forum, et je 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 gestion de socket [ par kev03 ] bonjour,je travaille sur un logiciel de messagerie et j'aurais quelques petites questions a propos des sockets:peut-on laisser un grand nombre de port Client html [ par elinep ] Voila le code d'un petit client html que j'ai trouve sur cppfrance:#include #include #include #pragma comment(lib, "ws2_32.lib")SOCKET s;in_addr addr; connection client serveur avec MFC [ par Spiffou ] Bonjour à tous,j'avance petit à petit dans la programmation socket, mais je suis confronté à une nouvelle difficulté et j'ai une ou deux question sans Chat en C sous Linux [ par slobberbone ] Bonjour à tous et bonne Année 2005 ! Voilà j'ai un projet à faire, il consiste à faire une messagerie instantanée ( Client & Serveur ) J'arrive à fai Probleme de Socket [ par Basica ] Bonjour, j'ai un petit problème avec winsock que je n'arrive pas à résoudre. Mon but est de récuppérer des pages internet en utilisant winsock en C/C


Nos sponsors


Sondage...

Comparez les prix

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 : 0,515 sec (3)

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