Après avoir créé le socket, il va falloir utiliser la fonction connect en lui passant 3 paramètres :
Il va donc falloir déclarer une variante de la structure sockaddr correspondant à AF_INET. Il s'agit du type struct sockaddr_in. On commencera par mettre à zéro le contenu de cette structure via la fonction bzero de string.h, puis on affectera, au premier champ, nommé ici sin_family, la valeur AF_INET.
struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET;
Il faut ensuite remplir, dans la structure, le champ sin_addr avec l'adresse IPv4 du serveur à contacter et le champ sin_port avec le numéro de son port TCP.
inet_aton("127.0.0.1", &addr.sin_addr); addr.sin_port = htons(80);
Ayant ainsi précisé l'adresse 127.0.0.1 et le port 80, il ne reste plus qu'à appeler la fonction connect pour que le client cherche à établir la connexion avec le serveur web local.
connect(fd, (struct sockaddr *) &addr, sizeof(addr));
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <netdb.h> #include <sys/socket.h> #include <string.h> // pour la fonction bzero #include <arpa/inet.h> // pour la fonction inet_addr void communication_client(int fd) { } int main() { int fd; struct sockaddr_in addr; int err; fd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (fd<0) { printf("Erreur de creation de la socket !\n"); exit(1); } bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; err = inet_aton("127.0.0.1", &addr.sin_addr); if (err == 0) { printf("Adresse IPv4 invalide !\n"); exit(1); } addr.sin_port = htons(8080); err = connect(fd, (struct sockaddr *) &addr, sizeof(addr)); if (err != 0) { printf("Erreur de connexion au serveur !\n"); exit(1); } printf("Connexion établie avec le serveur !\n"); communication_client(); return 0; }
Dans les langages comme PHP ou Python, il existe des bibliothèques faisant l'interface avec les fonctions systèmes.
Le code de l'exemple écrit en C devient en PHP :
function communication_client($socket) { } $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket == false) die("Erreur de creation de la socket !\n"); $err=socket_connect($socket, '127.0.0.1', 8080); if ($err == false) die("Erreur de connexion au serveur !\n"); echo "Connexion établie avec le serveur !\n"; communication_client($socket);
Le code de l'exemple écrit en C devient en Python :
def communication_client(sock) : ... try : sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1',8080)) communication_client(sock) except socket.error : print("Erreur de lancement du client !") exit() print("Connexion établie avec le serveur !")