franceso | Il s'agit plutôt d'une requête HTTP (pas grand chose à voir avec HTML)
Le principe général est:
- 1. ouvrir une socket vers le serveur qui t'intéresse (members.dyndns.org, port 80). Il existe des tonnes de docs sur le sujet.
Par exemple : (ce code provient du poly de cours de programmation système de l'ENSTA)
Code :
- int socket_client ( char *serveur , unsigned short port )
- {
- int client_socket ;
- struct hostent *hostent ;
- struct sockaddr_in serveur_sockaddr_in ;
- client_socket = socket ( PF_INET , SOCK_STREAM , 0 ) ;
- if ( client_socket == -1 )
- {
- perror ( "socket" ) ;
- exit ( EXIT_FAILURE ) ;
- }
- if ( inet_addr ( serveur ) == INADDR_NONE ) /* nom */
- {
- hostent = gethostbyname ( serveur ) ;
- if ( hostent == NULL )
- {
- perror ( "gethostbyname" ) ;
- exit ( EXIT_FAILURE ) ;
- }
- }
- else /* adresse IP */
- {
- unsigned long addr = inet_addr ( serveur ) ;
- hostent = gethostbyaddr ( ( char * ) &addr , sizeof ( addr ) ,
- AF_INET ) ;
- if ( hostent == NULL )
- {
- perror ( "gethostbyaddr" ) ;
- exit ( EXIT_FAILURE ) ;
- }
- }
- memset ( &serveur_sockaddr_in , 0 , sizeof ( serveur_sockaddr_in ) ) ;
- serveur_sockaddr_in.sin_family = AF_INET ;
- serveur_sockaddr_in.sin_port = htons ( port ) ;
- memcpy ( &serveur_sockaddr_in.sin_addr.s_addr , hostent->h_addr_list[0] ,
- hostent->h_length) ;
- printf ( ">>> Connexion vers le port %d de %s [%s]\n" ,
- port , hostent->h_name ,
- inet_ntoa ( serveur_sockaddr_in.sin_addr ) ) ;
- if ( connect ( client_socket , ( struct sockaddr * ) &serveur_sockaddr_in ,
- sizeof ( serveur_sockaddr_in ) ) == -1 )
- {
- perror ( "connect" ) ;
- exit ( EXIT_FAILURE ) ;
- }
- return client_socket ;
- }
|
<edit> j'ai oublié de préciser que tout ceci est spécifique pour Linux (ou plutôt POSIX). Il faut bien sûr que tu adaptes en utilisant les fonctions spécifiques de ton OS </edit>
- 2. visiblement, tu as une authentification à gérer, et ça, je ne sais pas du tout comment ça marche
- 3. tu envoies la requête http dans la socket de connexion :
Code :
- int c_socket = client_socket( "members.dyndns.org", 80 );
- fprintf( c_socket, "GET /nic/update?system=dyndns&hostname=%s&myip=%s&wildcard=OFF&mx=&backmx=NO&offline=NO HTTP/1.0\n\n", adresse_dyn_dns, ip );
|
Message édité par franceso le 16-02-2006 à 10:31:10
|