Les sockets en Python
Pour les projets ou pour d'autres situations, il est parfois utile d'établir une communication entre deux applications, cette page détaille les étapes d’une communication client-serveur en Python utilisant des sockets TCP.
Chaque primitive réseau est expliquée à partir des exemples fournis.
Tcp
Une communication TCP repose sur deux rĂ´les :
- Serveur : attend une connexion entrante.
- Client : initie la connexion vers le serveur.
Le protocole TCP garantit une communication fiable, ordonnée et orientée connexion.
Serveur : étapes détaillées⚓︎
1. socket.socket()⚓︎
| Python | |
|---|---|
- Création de la socket
AF_INET: utilise IPv4SOCK_STREAM: utilise TCP (connexion fiable)
2. bind()⚓︎
| Python | |
|---|---|
- Associe la socket Ă une adresse IP + port
'': signifie "toutes les interfaces réseau disponibles"1042: port d’écoute
Le système d’exploitation réserve ce port pour ce programme. Pour les applications qui sont lancés sans les privilèges admin, seuls les ports supérieurs à 1024 sont autorisés par le système.
3. listen()⚓︎
| Python | |
|---|---|
- Met la socket en mode écoute
- Le serveur est prĂŞt Ă accepter des connexions
Une file d’attente interne est créée pour stocker les demandes entrantes.
4. accept()⚓︎
| Python | |
|---|---|
- Bloque jusqu’à ce qu’un client se connecte
-
Retourne un tuple :
-
socket_client: nouvelle socket dédiée à la communication avec ce client (adr_client, port_client): adresse du client (IP, port)
Important : une nouvelle socket : socket_client est créée pour dialoguer avec le client.
5. recv()⚓︎
| Python | |
|---|---|
- Reçoit des données depuis le client
1024: taille maximale en octets
Les données reçues sont de type bytes. C'est à dire qu'elles ne sont pas directement interprétées comme des caractères dans un jeu de caractère (sauf pour l'ASCII), pour les caractères accentués il faut utiliser encode et decode.
6. Traitement du message⚓︎
| Python | |
|---|---|
- Conversion des bytes en chaîne de caractères
7. close()⚓︎
| Python | |
|---|---|
- Ferme la connexion avec le client Libère les ressources réseau.
Client : étapes détaillées⚓︎
| Python | |
|---|---|
1. socket.socket()⚓︎
| Python | |
|---|---|
- Création de la socket client
- Même paramètres que le serveur (IPv4 + TCP)
2. connect()⚓︎
| Python | |
|---|---|
- Tente de se connecter au serveur
'localhost': machine locale1042: port cible
Cette étape déclenche la poignée de main TCP (TCP handshake).
3. send()⚓︎
| Python | |
|---|---|
- Envoie des données au serveur
- Les données doivent être en bytes
Ici, on encode une chaîne avec UTF-8 :
| Python | |
|---|---|
4. close()⚓︎
| Python | |
|---|---|
- Ferme la connexion côté client
🔄 Résumé du flux de communication⚓︎
-
Le serveur :
-
crée une socket
- bind sur un port
- écoute (
listen) -
attend une connexion (
accept) -
Le client :
-
crée une socket
-
se connecte (
connect) -
Échange :
-
client envoie (
send) -
serveur reçoit (
recv) -
Fermeture :
-
client et serveur ferment leur socket (
close)
Ce code est à adapter pour des situations avec plusieurs échanges entres deux applications, ou pour des échanges entre plus de deux applications.