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