Utilisation des sockets côté client en mode connecté

En langage C :

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.

Remarques :

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));
	

Exemple :

#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;
}
	

PHP et Python :

Dans les langages comme PHP ou Python, il existe des bibliothèques faisant l'interface avec les fonctions systèmes.

PHP

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);
	

Python

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 !")