BAC PRO CIEL

← Retour Python
Cours en ligne

Python - Module 13

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.

Sommaire

1. À quoi sert socket ?

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.

À retenir :
socket est une base importante pour comprendre les communications TCP/IP, les scripts réseau et certains usages en cybersécurité.

2. Principe client / serveur

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.
Serveur : attend une connexion Client : se connecte au serveur

3. Importation du module

Avant d’utiliser les fonctions réseau, il faut importer le module socket.

import socket

4. Création d’un socket

Pour créer une communication TCP en IPv4, on utilise :

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Élément Signification
AF_INET Utilisation d’IPv4
SOCK_STREAM Utilisation de TCP
AF_INET correspond à IPv4 et SOCK_STREAM correspond à TCP.

5. Base d’un serveur TCP

Le serveur crée un socket, l’associe à une adresse IP et à un port, puis attend qu’un client se connecte.

import socket serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serveur.bind(("0.0.0.0", 5000)) serveur.listen() print("Serveur en attente...") client, adresse = serveur.accept() print("Client connecté :", adresse) data = client.recv(1024) print("Reçu :", data.decode()) client.send("Message reçu".encode()) client.close() serveur.close()
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.
Attention :
accept() bloque le programme tant qu’aucun client ne se connecte.

6. Base d’un client TCP

Le client crée un socket, se connecte au serveur, envoie un message puis attend une réponse.

import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 5000)) client.send("Bonjour serveur".encode()) data = client.recv(1024) print("Réponse :", data.decode()) client.close()
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.

7. Fonctions importantes

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.

8. Traitement du texte : encode() et decode()

Les sockets travaillent avec des données de type bytes. Pour envoyer ou recevoir du texte, il faut donc convertir les données.

Envoyer du texte

client.send("Bonjour".encode())

Recevoir du texte

data = client.recv(1024) texte = data.decode() print(texte)
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.

9. Serveur multi-clients avec une boucle

Une boucle while True permet au serveur d’accepter plusieurs clients les uns après les autres.

while True: client, adresse = serveur.accept() print("Connexion :", adresse) data = client.recv(1024) print(data.decode()) client.close()
Ce serveur accepte plusieurs clients successivement, mais pas plusieurs clients simultanément.

10. Erreurs fréquentes

Oublier encode()

client.send("Bonjour")
send() attend des données en bytes. Il faut donc écrire "Bonjour".encode().

Mauvaise IP ou mauvais port

Une mauvaise adresse IP, un mauvais port ou un serveur non lancé peut provoquer une erreur de connexion.

Mal comprendre recv(1024)

data = client.recv(1024)
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.

Oublier close()

Il faut fermer les connexions lorsque l’échange est terminé afin de libérer proprement les ressources.

11. Synthèse

Voici les notions essentielles à retenir pour ce module.

Serveur

  • bind()
  • listen()
  • accept()

Client

  • connect()
  • send()
  • recv()

Données

  • encode()
  • decode()
  • bytes

Attention

  • IP / port
  • serveur lancé
  • recv(1024)
  • close()
Points clés à retenir :
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.