Communiquer en réseau avec socket
Ce module présente l’utilisation du module socket en Python pour créer
une communication réseau simple entre un serveur TCP et un client TCP.
Le module socket permet de créer des communications réseau entre plusieurs machines.
Il est utilisé pour envoyer et recevoir des données via le réseau.
socket est une base importante pour comprendre les communications TCP/IP,
les scripts réseau et certains usages en cybersécurité.
Une communication réseau simple repose souvent sur deux rôles : un serveur et un client.
| Rôle | Description |
|---|---|
| Serveur | Il attend une connexion entrante. |
| Client | Il se connecte au serveur pour échanger des données. |
Avant d’utiliser les fonctions réseau, il faut importer le module socket.
Pour créer une communication TCP en IPv4, on utilise :
| Élément | Signification |
|---|---|
AF_INET |
Utilisation d’IPv4 |
SOCK_STREAM |
Utilisation de TCP |
AF_INET correspond à IPv4 et SOCK_STREAM correspond à TCP.
Le serveur crée un socket, l’associe à une adresse IP et à un port, puis attend qu’un client se connecte.
| Instruction | Rôle |
|---|---|
bind(("0.0.0.0", 5000)) |
Associe le serveur à toutes les interfaces réseau sur le port 5000. |
listen() |
Place le serveur en attente de connexion. |
accept() |
Attend qu’un client se connecte. Cette instruction bloque le programme. |
recv(1024) |
Reçoit jusqu’à 1024 octets depuis le client. |
send() |
Envoie une réponse au client. |
close() |
Ferme la connexion. |
accept() bloque le programme tant qu’aucun client ne se connecte.
Le client crée un socket, se connecte au serveur, envoie un message puis attend une réponse.
| Instruction | Rôle |
|---|---|
connect(("127.0.0.1", 5000)) |
Connexion au serveur local sur le port 5000. |
send() |
Envoie un message au serveur. |
recv(1024) |
Reçoit une réponse du serveur. |
decode() |
Convertit les données reçues en texte. |
close() |
Ferme la connexion avec le serveur. |
| Fonction | Rôle |
|---|---|
socket() |
Crée un socket. |
bind() |
Associe une IP et un port à un serveur. |
listen() |
Met le serveur en attente de connexion. |
accept() |
Accepte une connexion entrante. |
connect() |
Connecte un client à un serveur. |
send() |
Envoie des données. |
recv() |
Reçoit des données. |
close() |
Ferme la connexion. |
Les sockets travaillent avec des données de type bytes. Pour envoyer ou recevoir du texte, il faut donc convertir les données.
| Méthode | Conversion |
|---|---|
encode() |
Texte → bytes |
decode() |
Bytes → texte |
encode() permet d’envoyer du texte sur le réseau.
decode() permet de lire du texte reçu depuis le réseau.
Une boucle while True permet au serveur d’accepter plusieurs clients
les uns après les autres.
send() attend des données en bytes. Il faut donc écrire
"Bonjour".encode().
recv(1024) signifie que l’on reçoit jusqu’à 1024 octets.
Cela ne garantit pas forcément de recevoir toutes les données envoyées.
Voici les notions essentielles à retenir pour ce module.
socket permet de créer une communication réseau.bind() est utilisé côté serveur.connect() est utilisé côté client.send() envoie des données et recv() reçoit des données.encode() convertit texte → bytes et decode() convertit bytes → texte.