Comprendre les Sockets Python et la Communication de Base
Commençons par comprendre ce que sont les sockets et comment ils fonctionnent en Python.
Qu'est-ce qu'un Socket ?
Un socket est un point de terminaison (endpoint) pour l'envoi et la réception de données sur un réseau. Considérez-le comme un point de connexion virtuel par lequel circule la communication réseau. Le module socket intégré de Python fournit les outils pour créer, configurer et utiliser des sockets pour la communication réseau.
Flux de Communication Socket de Base
La communication socket suit généralement ces étapes :
- Créer un objet socket
- Lier le socket à une adresse (pour les serveurs)
- Écouter les connexions entrantes (pour les serveurs)
- Accepter les connexions (pour les serveurs) ou se connecter à un serveur (pour les clients)
- Envoyer et recevoir des données
- Fermer le socket lorsque vous avez terminé
Créons notre premier programme socket simple pour mieux comprendre ces concepts.
Création de Votre Premier Serveur Socket
Tout d'abord, créons un serveur socket de base qui écoute les connexions et renvoie toutes les données qu'il reçoit.
Ouvrez le WebIDE et créez un nouveau fichier nommé server.py dans le répertoire /home/labex/project avec le contenu suivant :
import socket
## Define server address and port
HOST = '127.0.0.1' ## Standard loopback interface address (localhost)
PORT = 65432 ## Port to listen on (non-privileged ports are > 1023)
## Create a socket object
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(f"Socket created successfully")
## Bind the socket to the specified address and port
server_socket.bind((HOST, PORT))
print(f"Socket bound to {HOST}:{PORT}")
## Listen for incoming connections
server_socket.listen(1)
print(f"Socket is listening for connections")
## Accept a connection
print(f"Waiting for a connection...")
connection, client_address = server_socket.accept()
print(f"Connected to client: {client_address}")
## Receive and echo data
try:
while True:
## Receive data from the client
data = connection.recv(1024)
if not data:
## If no data is received, the client has disconnected
print(f"Client disconnected")
break
print(f"Received: {data.decode('utf-8')}")
## Echo the data back to the client
connection.sendall(data)
print(f"Sent: {data.decode('utf-8')}")
finally:
## Clean up the connection
connection.close()
server_socket.close()
print(f"Socket closed")
Création de Votre Premier Client Socket
Maintenant, créons un client pour nous connecter à notre serveur. Créez un nouveau fichier nommé client.py dans le même répertoire avec le contenu suivant :
import socket
## Define server address and port
HOST = '127.0.0.1' ## The server's hostname or IP address
PORT = 65432 ## The port used by the server
## Create a socket object
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(f"Socket created successfully")
## Connect to the server
client_socket.connect((HOST, PORT))
print(f"Connected to server at {HOST}:{PORT}")
## Send and receive data
try:
## Send data to the server
message = "Hello, Server!"
client_socket.sendall(message.encode('utf-8'))
print(f"Sent: {message}")
## Receive data from the server
data = client_socket.recv(1024)
print(f"Received: {data.decode('utf-8')}")
finally:
## Clean up the connection
client_socket.close()
print(f"Socket closed")
Tester Vos Programmes Socket
Maintenant, testons nos programmes socket. Ouvrez deux fenêtres de terminal dans la VM LabEx.
Dans le premier terminal, exécutez le serveur :
cd ~/project
python3 server.py
Vous devriez voir une sortie similaire à :
Socket created successfully
Socket bound to 127.0.0.1:65432
Socket is listening for connections
Waiting for a connection...
Gardez le serveur en cours d'exécution et ouvrez un second terminal pour exécuter le client :
cd ~/project
python3 client.py
Vous devriez voir une sortie similaire à :
Socket created successfully
Connected to server at 127.0.0.1:65432
Sent: Hello, Server!
Received: Hello, Server!
Socket closed
Et dans le terminal du serveur, vous devriez voir :
Connected to client: ('127.0.0.1', XXXXX)
Received: Hello, Server!
Sent: Hello, Server!
Client disconnected
Socket closed
Félicitations ! Vous venez de créer et de tester votre première application client-serveur basée sur les sockets en Python. Cela fournit les bases pour comprendre comment fonctionne la communication socket et comment implémenter la gestion des erreurs dans les prochaines étapes.