Outils pour utilisateurs

Outils du site


debuter_en_python:socket

Ceci est une ancienne révision du document !


Table des matières

Les sockets réseaux en Python

Un socket est un point de communication entre deux programmes. On peut le voir comme une prise réseau : un programme attend sur une adresse IP et un port, et un autre s’y connecte pour échanger des données.

Voici un exemple simple en TCP : le client envoie un message et le serveur lui renvoie le même message. TCP établit une connexion entre les deux programmes. En Python, le serveur crée une socket, l’associe à une adresse avec bind(), attend une connexion avec listen() et accept() ; le client se connecte avec connect().

Pour le serveur

fileserveur.py
import socket
 
HOST = "192.168.xxx.xxx"  # Inserer la bonne @IP ==> 127.0.0.1 pour le même PC  
PORT = 50007
 
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serveur:
    serveur.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    serveur.bind((HOST, PORT))
    serveur.listen()
 
    print(f"Serveur actif sur {HOST}:{PORT} (Ctrl+C pour arrêter)")
 
    while True:  # accepte les connexions indéfiniment
        connexion, adresse = serveur.accept()
        print("Client connecté :", adresse)
 
        with connexion:
            # Utilise une ligne terminée par Entrée comme délimiteur de message
            with connexion.makefile("rwb") as flux:
                for ligne in flux:
                    message = ligne.decode("utf-8").rstrip("\n")
                    print("Message reçu :", message)
 
                    if message.lower() == "quit":
                        flux.write("Connexion fermée\n".encode("utf-8"))
                        flux.flush()
                        break
 
                    flux.write(f"Serveur reçu : {message}\n".encode("utf-8"))
                    flux.flush()
 
        print("Client déconnecté")

pour le client

fileclient.py
import socket
 
HOST = "127.0.0.1"
PORT = 50007
 
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
    client.connect((HOST, PORT))
 
    with client.makefile("rwb") as flux:
        while True:
            message = input("Votre message (quit pour quitter) : ")
            flux.write((message + "\n").encode("utf-8"))
            flux.flush()
 
            reponse = flux.readline()
            if not reponse:
                print("Le serveur a fermé la connexion.")
                break
 
            print(reponse.decode("utf-8").rstrip())
 
            if message.lower() == "quit":
                break
 
/home/chanteri/www/fablab37110/data/attic/debuter_en_python/socket.1791908342.txt.gz · Dernière modification : de admin