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

Réseau C Discussion :

retourner une page web sur le port 80 en gcc


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut retourner une page web sur le port 80 en gcc
    Bonjour à tous,
    je développe en gcc avec anjuta sous linux et voudrais renvoyer une page internet sur le port 80 après avoir recu une requête avec passage de paramètres !

    Quelqu'un aurait-il déjà fait cela ?

    je ne sais pas pour ou commencer

    Merci d'avance.

    jfcocu

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: retourner une page web sur le port 80 en gcc
    Citation Envoyé par jfcocu
    je développe en gcc avec anjuta sous linux et voudrais renvoyer une page internet sur le port 80 après avoir recu une requête avec passage de paramètres !

    Quelqu'un aurait-il déjà fait cela ?

    je ne sais pas pour ou commencer
    Tu télécharges Apache, tu fais 'make', et c'est fini.

    Sinon, tu écris un serveur qui écoute le port 80 (voir 'sockets'), et tu interpretes les commandes reçues selon le protocole HTTP. Tu dois sans doute renvoyer des pages HTML par le même protocole HTTP.

    Ca s'appelle un serveur Web... C'est pour de l'embarqué ?
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Un peu d'aide sur les sockets
    http://c.developpez.com/WalrusSock/

    La RFC sur le protocole HTTP en francais
    http://abcdrfc.free.fr/rfc-vf/rfc1945.html
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je te conseille SDL_Net, qui est portable et assez simple d'utilisation. Pour ton problème, voici un petit code (j'ai pas pu m'en empêcher !) :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <cstdlib>
    #include <SDL/SDL.h>
    #include <SDL/SDL_net.h>
    #include <string.h>
     
    // Pas confiance ;)
    bool cmp(char* ch1,char* ch2,int num)
    {
        int pos=0;
        while(*ch1==*ch2)
        {
            pos+=1;
            if(pos>num)
                return true;
            ch1+=1;
            ch2+=1;
        }
        return false;
    }
     
    int main(int argc,char** argv)
    {
        // Initialisation de SDL
        SDL_Init(0);
     
        // Ecoute sur le port 80
        IPaddress adresse;
     
        SDLNet_ResolveHost(&adresse,NULL,80);
     
        TCPsocket serveur,socket;
     
        // Créé la socket serveur
        serveur = SDLNet_TCP_Open(&adresse);
        if(!serveur)
        {
            std::cout<<"Impossible de creer la socket serveur !\n";
            std::cout<<"Le port est-il libre ?\n";
            SDLNet_TCP_Close(serveur);
            exit(0);
        }
     
        // Attend une connection
        socket=NULL;
        while(socket==NULL)
            socket = SDLNet_TCP_Accept(serveur);
     
        // Attend de recevoir deux retours à la ligne
        char buffer[1024];
        int pos=0;
     
        while(true)
        {
            if(SDLNet_TCP_Recv(socket,&buffer[pos],1)<1)
            {
                // Fermeture de la connection
                SDLNet_TCP_Close(serveur);
                SDLNet_TCP_Close(socket);
                exit(0);
            }
     
            pos+=1;
            buffer[pos] = '\0';
     
            if(pos>4)
            {
                if(cmp(&buffer[pos-4],"\r\n\r\n",4))
                    break;
            }
        }
     
        // On balance !!!
        char* page = "<html>\r\n  <head><title>Test</title></head>\r\n  <body><h1>Yeah !</h1></body>\r\n</html>";
        SDLNet_TCP_Send(socket,page,strlen(page));
     
        SDLNet_TCP_Close(serveur);
        SDLNet_TCP_Close(socket);
        exit(0);
    }

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par remram44
    Je te conseille SDL_Net, qui est portable et assez simple d'utilisation. Pour ton problème, voici un petit code (j'ai pas pu m'en empêcher !) :
    Ouais mais c'est C++
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Skyrunner
    Citation Envoyé par remram44
    Je te conseille SDL_Net, qui est portable et assez simple d'utilisation. Pour ton problème, voici un petit code (j'ai pas pu m'en empêcher !) :
    Ouais mais c'est C++
    L'exemple est codé en C++, mais je crois bien que SDL a une interface C...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Skyrunner
    Citation Envoyé par remram44
    Je te conseille SDL_Net, qui est portable et assez simple d'utilisation. Pour ton problème, voici un petit code (j'ai pas pu m'en empêcher !) :
    Ouais mais c'est C++
    L'exemple est codé en C++, mais je crois bien que SDL a une interface C...
    Oui oui je confirme avec par exemple ce tuto (c'est de la 3D mais bon...)
    http://anomaly.developpez.com/tutoriels/sdl/partie1/
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Ouaips, je suis d'accord, mais est-il possible d'avoir une requete faite par un browser avec passage de paramètre ?
    Dans le but d'adapter la page suivant la requête ?

    jfcocu

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par jfcocu
    Ouaips, je suis d'accord, mais est-il possible d'avoir une requete faite par un browser avec passage de paramètre ?
    Dans le but d'adapter la page suivant la requête ?
    Je te conseille d'étudier le protocole HTTP et le CGI.

    Tout celà n'a rien à voir avec le langage C.

    Le bon forum est "Développement Réseaux"
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Invité
    Invité(e)
    Par défaut
    Dans mon exemple, "buffer" contient la requête envoyée par le navigateur.

    Désolé d'avoir écris en C++, mais ça marche impec en C aussi Il suffit de remplacer <cstdlib> par <stdlib.h>

Discussions similaires

  1. Recupérer une page web sur un serveur HTTPS
    Par guis14 dans le forum Général Java
    Réponses: 6
    Dernier message: 23/05/2008, 12h29
  2. Ouvrir une page web sur un client à partir d'un serveur
    Par Maestro57 dans le forum Langage
    Réponses: 6
    Dernier message: 04/04/2008, 08h24
  3. Affichage d'une page web sur le serveur Apache
    Par marcandre dans le forum Apache
    Réponses: 9
    Dernier message: 04/02/2008, 18h10
  4. Impression d'une page web sur plusieurs pages papier
    Par Spidyy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/06/2006, 17h42
  5. Imprimer une page web sur une seule feuille ?
    Par guidav dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/04/2006, 11h26

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