zakinster | Les fonctions de base de la bibliothèque WinSock2 :
int connect(SOCKET s, const struct sockaddr* name, int namelen);
int send(SOCKET s, const char* buf, int len, int flags);
int recv(SOCKET s, char* buf, int len, int flags);
Je viens de coder un exemple d'utilisation des socket pour aller chercher une page web sur internet :
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <winsock2.h> /* on a besoin de winsock2 pour utiliser les socket */
- int main()
- {
- WSADATA WSAData; /* variable servant à l'initialisation de winsock2 */
- SOCKET sock; /* socket de donnée qui va nous permettre de communiquer */
- IN_ADDR addr; /* variable pour stocker l'adresse du serveur web */
- SOCKADDR_IN sin; /* structure qui va stocker les informations sur la destination */
- HOSTENT *host; /* variable dont on a besoin pour obtenir l'ip a partir du domaine */
- char buffer[4096] = {0}; /* le buffer qui va contenir la page web, 4 ko max */
- WSAStartup(MAKEWORD(2,0), &WSAData); /* initialisation de winsock2 */
- sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* initialisation du socket */
- host = gethostbyname("www.google.fr" ); /* récupération du nom d'hôte a partir du nom de domaine */
- memcpy(&addr, host->h_addr, host->h_length); /* récupération de l'ip à partir du nom d'hote */
- sin.sin_family = AF_INET; /* on stock la famille du réseau, en général c'est AF_INET */
- sin.sin_port = htons(80); /* on stock le port sur lequel se connecter */
- sin.sin_addr = addr; /* on stock l'adresse ip du serveur */
- connect(sock, (SOCKADDR *)&sin, sizeof(sin)); /* on se connecte au serveur */
- strcpy(buffer, "GET http://www.google.fr/ HTTP/1.0\n\n" ); /* on formule la requete GET, protocole HTTP */
- send(sock, buffer, strlen(buffer), 0); /* on envoi la requête stockée dans le buffer */
- recv(sock, buffer, sizeof(buffer), 0); /* on attend la page web qu'on va stocker dans le buffer */
- closesocket(sock); /* on ferme le socket */
- WSACleanup(); /* on nettoi la bibliothèque winsock2 */
- printf(buffer); /* on affiche la page contenue dans le buffer */
- return 0;
- }
|
ne pas oublier de linker libws2_32.a
J'ai commenté chaque ligne, le code est très rudimentaire mais ca permet de voir à quoi ressemble les sockets et d'avoir une application tout de suite très intéressante.
Attention c'est une page web que le programme demande au serveur, ce dernier va donc nous envoyer du code html, c'est ce qui sera stocké dans le buffer et affiché à l'écran Un cours succins mais clair sur les socket en français : http://c.developpez.com/WalrusSock/
Beaucoup d'exemple sur l'utilisation des socket : http://www.cppfrance.com/recherche [...] &tr=source Message édité par zakinster le 30-10-2006 à 19:41:20
|