0% ont trouvé ce document utile (0 vote)
83 vues16 pages

Cous Python 2 Programmation Sockets

Le document décrit la programmation de sockets réseau en Python, y compris les sockets TCP et UDP. Il présente des exemples de code pour les clients et serveurs TCP et UDP.

Transféré par

Seydina Oumar Keita
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
83 vues16 pages

Cous Python 2 Programmation Sockets

Le document décrit la programmation de sockets réseau en Python, y compris les sockets TCP et UDP. Il présente des exemples de code pour les clients et serveurs TCP et UDP.

Transféré par

Seydina Oumar Keita
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 16

Programmation socket

Les connecteurs (sockets, en anglais) sont utilisés presque partout,


mais ils sont l'une des technologies les plus méconnues.
Un socket réseau est un point de communication inter-processus sur
un réseau informatique. La bibliothèque standard Python possède un
module appelé socket qui fournit une interface réseau Internet de bas
niveau. Cette interface est commune à différents langages de
programmation car elle utilise des appels système au niveau du
système d’exploitation.
Socket TCP
Pour créer un socket, il existe une fonction appelée socket(). Il accepte
les arguments suivnats: famille, type et proto. Pour créer un socket TCP,
vous devez utiliser socket.AF_INET ou socket.AF_INET6 pour la famille
et socket.SOCK_STREAM pour le type.
Exemple de socket:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Il renvoie un objet socket qui a les principales méthodes suivantes:


• bind()
• listen()
• accept()
• connect()
• send()
• recv()

bind(), listen() et accept() sont spécifiques aux sockets serveur. connect() est
spécifique aux sockets client. send() et recv() sont communs aux deux types.
Voici un exemple de serveur TCP:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 9999))
s.listen(5)
conn, addr = s.accept()
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
Ici, nous créons un socket de serveur, le lions à localhost et un port
9999 et commençons à écouter les connexions entrantes.
Ensuite, nous avons utilisé s.listen(5) pour écouter. Ici, le « 5 »
représente le nombre de connexions entrantes que nous sommes prêts
à mettre en file d’attente avant d’en refuser.
Pour accepter une connexion entrante, nous appelons la méthode
accept() qui bloquera jusqu’à ce qu’un nouveau client se connecte.
Lorsque cela se produit, il crée un nouveau socket et le renvoie avec
l’adresse du client.
Ensuite, dans un boucle infini, il lit les données du socket par lots de
1024 octets en utilisant la méthode recv() jusqu’à ce qu’il retourne une
chaîne vide. Après cela, il renvoie toutes les données entrantes en
utilisant la méthode sendall() qui à l’intérieur appelle plusieurs fois la
méthode send(). Et après cela, il ferme simplement la connexion du
client.
Voici le code côté client TCP:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 9999))
s.sendall('Welcome to WayToLearnX!')
data = s.recv(1024)
s.close()
print repr(data), 'Reçue'
Ici, au lieu d’utiliser bind() et listen(), il appelle uniquement connect() et
envoie immédiatement des données au serveur. Il reçoit ensuite 1024
octets, ferme le socket et affiche les données reçues.
Socket UDP
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.
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.
Voici un exemple de serveur UDP:
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)
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")
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)
Voici le code côté client UDP:
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)
Références
https://docs.python.org/fr/3/howto/sockets.html

https://waytolearnx.com/2020/06/socket-tcp-client-serveur-avec-
python.html

https://waytolearnx.com/2020/06/socket-udp-client-serveur-avec-
python.html

Vous aimerez peut-être aussi