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);
} | 
Partager