Socket UDP Client-Serveur avec Python

image_pdfimage_print

Le protocole UDP fonctionne différemment de TCP/IP. TCP est un protocole orienté flux, garantissant que toutes les données sont transmises dans le bon ordre, UDP est un protocole orienté message. UDP ne nécessite pas de connexion de longue durée, donc la configuration d’un socket UDP est un peu plus simple. D’ailleurs, les messages UDP doivent tenir dans un seul paquet (pour IPv4, cela signifie qu’ils ne peuvent contenir que 65507 octets car le paquet de 65535 octets comprend également des informations d’en-tête) et la livraison n’est pas garantie comme c’est le cas avec TCP.
 
 

 

Exemple: Serveur UDP utilisant Python

Puisqu’il n’y a pas de connexion, le serveur n’a pas besoin d’écouter et d’accepter les connexions. Il a seulement besoin d’utiliser bind() pour associer son socket à un port, puis attendre les messages.

Les messages sont lus à partir du socket à l’aide de recvfrom(), qui renvoie les données ainsi que l’adresse du client à partir duquel elles ont été envoyées.

import socket

msg = str.encode("Hello Client!")

# Créer une socket datagramme
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Lier à l'adresse IP et le port
s.bind(("127.0.0.1", 9999))
print("Serveur UDP à l'écoute")

# Écoutez les datagrammes entrants
while(True):
    addr = s.recvfrom(1024)
    message = addr[0]
    address = addr[1]
    clientMsg = "Message du client: {}".format(message)
    clientIP  = "Adresse IP du client: {}".format(address)
    print(clientMsg)
    print(clientIP)

    # Envoi d'une réponse au client
    s.sendto(msg, address)

Sortie:

Serveur UDP à l'écoute
Message du client: b'Hello Server'
Adresse IP du client: ('127.0.0.1', 59099)

 
 

Exemple: Client UDP utilisant Python

Le client UDP est similaire au serveur, mais n’utilise pas bind() pour attacher son socket à une adresse. Il utilise sendto() pour livrer son message directement au serveur et recvfrom() pour recevoir la réponse.

import socket

msgClient = "Hello Server"
msgToSend = str.encode(msgClient)
addrPort = ("127.0.0.1", 9999)
bufferSize = 1024

# Créer un socket UDP coté client
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Envoyer au serveur à l'aide du socket UDP créé
s.sendto(msgToSend, addrPort)
msgServer = s.recvfrom(bufferSize)

msg = "Message du serveur {}".format(msgServer[0])
print(msg)

Sortie:

Message du serveur 'Hello Client!'

 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *