Table des matières

Python – les sockets

Rappel sur TCP

TCP (Transmission Control Protocol), est un protocole orienté connexion. Les applications sont connectées pour communiquer et TCP permet de s'assurer qu'une information envoyée au travers du réseau bien été réceptionnée par l'autre application. Si la connexion est rompue pour une raison quelconque, les applications doivent rétablir la connexion pour communiquer de nouveau.

Client et serveur

Il s'agit de créer deux applications :

Les différentes étapes

Voici dans un ordre simplifié les étapes du client et du serveur. Plus loin dans ce document vous programmerez un serveur pouvant communiquer avec plusieurs clients.

Le serveur :

Le client :

Établir une connexion

Pour que le client se connecte au serveur, il lui faut deux informations :

Les sockets

Les sockets sont des objets qui permettent d'ouvrir une connexion avec une machine locale ou distante et d'échanger avec elle.

Ces objets sont définis dans le module socket .

Les sockets

import socket

Créez le serveur

Il faut faire appel au constructeur socket. Dans le cas d'une connexion TCP, il prend les deux paramètres suivants, dans l'ordre :

1)
, 12800)) </code> ==== Faire écouter le socket ==== Le socket est prêt à écouter sur le port 12800 mais il n'écoute pas encore. On va avant tout lui préciser le nombre maximum de connexions qu'il peut recevoir sur ce port sans les accepter. On utilise pour cela la méthode listen. On lui passe généralement 5 en paramètre. Cela ne veut pas dire que le serveur ne pourra dialoguer qu'avec 5 clients maximum. Cela veut dire que si 5 clients se connectent et que le serveur n'accepte aucune de ces connexions, aucun autre client ne pourra se connecter. Mais généralement, très peu de temps après que le client ait demandé la connexion, le serveur l'accepte. Vous pouvez donc avoir bien plus de clients connectés. <code python> »> connexion_principale.listen(5) </code> ==== Accepter une connexion venant du client ==== Dernière étape, accepter une connexion. Aucune connexion ne s'est encore présentée mais la méthode accept qui va être utilisée va bloquer le programme tant qu'aucun client ne s'est connecté. La méthode accept renvoie deux informations : * le socket connecté qui vient de se créer, celui qui va nous permettre de dialoguer avec notre client tout juste connecté ; * un tuple représentant l'adresse IP et le port de connexion du client. Le port de connexion du client n'est pas le même que celui du serveur, car le client, en ouvrant une connexion, passe par un port client qui va être choisi par le système parmi les ports disponibles. Il y a donc deux ports mis en œuvre dans une connexion TCP. <code python> »> connexionavecclient, infosconnexion = connexionprincipale.accept() </code>
Cette méthode bloque le programme. Elle attend qu'un client se connecte. Laissez cette fenêtre Python ouverte et, à présent, ouvrez-en une nouvelle pour construire notre client.
===== Création du client ===== Créez votre socket de la même façon : <code python> »> import socket »> connexionavecserveur = socket.socket(socket.AFINET, socket.SOCKSTREAM) </code> ==== Connecter le client ==== Pour se connecter à un serveur, on utilise la méthode connect qui prend en paramètre un tuple contenant le nom d'hôte (actuellement localhost) et le numéro du port identifiant le serveur (actuellement 12800 ) auquel on veut se connecter. <code python> »> connexionavecserveur.connect(('localhost', 12800
2) , 3)
hote, port