cs_magma
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
18 mars 2006 à 19:56
Petit exemple ici :
// MonIP.c -------------------------------------------------------------------
#include <windows.h>
#include <winsock2.h> //LIB: ws2_32.lib ou libws2_32.a
#define PORT 80
#define SIZE 2048
#define GET "GET /"
#define HOST "checkip.dyndns.org"
#define PAGE "/"
//----------------------------------------------------------------------------
int Erreur(char *Fonction)
{
char Text[128];
int Error = WSAGetLastError();
wsprintf(Text, "Fonction : %s \nCode : %d", Fonction, Error);
MessageBox(NULL, Text, "Erreur !", MB_OK | MB_ICONERROR);
WSACleanup();
return Error;
}
//----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nMode)
{
int r;
SOCKET s;
WSADATA wsa;
SOCKADDR_IN Serv;
LPHOSTENT Host;
char Page[SIZE];
if(WSAStartup(0x0202, &wsa) != NO_ERROR)
return Erreur("WSAStartup()");
if(!(Host = gethostbyname(HOST)))
return Erreur("gethostbyname()");
Serv.sin_family = Host->h_addrtype;
Serv.sin_port = htons(PORT);
Serv.sin_addr.s_addr = *((unsigned long *)Host->h_addr);
if((s socket(AF_INET, SOCK_STREAM, 0)) INVALID_SOCKET)
return Erreur("socket()");
if(connect(s, (SOCKADDR *)&Serv, sizeof(Serv)) == SOCKET_ERROR)
return Erreur("connect()");
wsprintf(Page, "%s%s HTTP/1.1\r\nHost: %s:%d\r\n\r\n", GET, PAGE, HOST, PORT);
if(send(s, Page, lstrlen(Page), 0) == SOCKET_ERROR)
return Erreur("send()");
if((r recv(s, Page, sizeof(Page), 0)) SOCKET_ERROR)
return Erreur("recv()");
// Affiche la page entiere
Page[r] = 0;
MessageBox(NULL, Page, "Page Entière", MB_OK);
// Affiche l'IP uniquement
*(strstr(Page, "")) = 0;
MessageBox(NULL, strstr(Page, "Address:") + 9, "Mon IP", MB_OK);
closesocket(s);
WSACleanup();
return 0;
}