Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Programmation réseau en Python : Maîtriser les sockets et protocoles avancés

Python offre deux niveaux d'accès aux services réseau. À bas niveau, vous pouvez accéder au support de base des sockets dans le système d'exploitation sous-jacent, ce qui permet d'implémenter des clients et serveurs pour les protocoles orientés connexion et sans connexion.

Python possède également des bibliothèques offrant un accès de niveau supérieur à des protocoles réseau au niveau application, tels que FTP, HTTP, etc.

Ce chapitre explique le concept le plus célèbre en réseautique : la programmation par sockets.

Qu'est-ce qu'un socket ?

Les sockets sont les points de terminaison d'un canal de communication bidirectionnel. Ils peuvent communiquer au sein d'un processus, entre processus sur la même machine, ou entre processus sur différents continents.

Les sockets peuvent être implémentés sur différents types de canaux : sockets de domaine Unix, TCP, UDP, etc. La bibliothèque socket fournit des classes spécifiques pour gérer les transports courants ainsi qu'une interface générique pour le reste.

Les sockets ont leur propre vocabulaire :

N°Terme et description
1

Domaine

Famille de protocoles utilisée comme mécanisme de transport. Valeurs constantes : AF_INET, PF_INET, PF_UNIX, PF_X25, etc.

2

Type

Type de communication entre les deux points : typiquement SOCK_STREAM pour protocoles orientés connexion, SOCK_DGRAM pour sans connexion.

3

Protocole

Généralement zéro, peut identifier une variante de protocole dans un domaine et type.

4

Nom d'hôte

Identificateur d'une interface réseau : chaîne (nom d'hôte, adresse IPv4, IPv6), "", chaîne vide (INADDR_ANY), ou entier (adresse binaire).

5

Port

Chaque serveur écoute sur un ou plusieurs ports. Peut être un numéro, une chaîne, ou un nom de service.

Le module socket

Pour créer un socket, utilisez socket.socket() du module socket :

s = socket.socket(socket_family, socket_type, protocol=0)

Paramètres :

Une fois l'objet socket obtenu, utilisez les fonctions requises pour créer votre client ou serveur.

Méthodes des sockets serveur

N°Méthode et description
1

s.bind()

Lie l'adresse (nom d'hôte, numéro de port) au socket.

2

s.listen()

Configure et démarre l'écoute TCP.

3

s.accept()

Accepte passivement une connexion client TCP, en attendant (bloquant).

Méthodes des sockets client

N°Méthode et description
1

s.connect()

Initie activement une connexion TCP serveur.

Méthodes générales des sockets

N°Méthode et description
1

s.recv()

Reçoit un message TCP

2

s.send()

Transmet un message TCP

3

s.recvfrom()

Reçoit un message UDP

4

s.sendto()

Transmet un message UDP

5

s.close()

Ferme le socket

6

socket.gethostname()

Renvoie le nom d'hôte.

Un serveur simple

Pour écrire des serveurs Internet, utilisez la fonction socket du module socket pour créer un objet socket. Cet objet appelle d'autres fonctions pour configurer un serveur socket.

Appelez bind(hostname, port) pour spécifier un port pour votre service sur l'hôte donné.

Appelez ensuite la méthode accept de l'objet retourné. Cette méthode attend qu'un client se connecte au port spécifié, puis renvoie un objet connection représentant la connexion vers ce client.

#!/usr/bin/python
# Fichier server.py
import socket

s = socket.socket()           # Créer un objet socket
host = socket.gethostname()   # Obtenir le nom de la machine locale
port = 12345                  # Réserver un port pour votre service
s.bind((host, port))          # Lier au port
s.listen(5)                   # Attendre la connexion client

while True:
    c, addr = s.accept()      # Établir la connexion avec le client
    print('Got connection from', addr)
    c.send('Thank you for connecting')
    c.close()                 # Fermer la connexion

Un client simple

Écrivons un client très simple qui ouvre une connexion au port 12345 sur l'hôte donné. C'est très simple avec le module socket de Python.

socket.connect(hostname, port) ouvre une connexion TCP vers hostname sur le port. Une fois le socket ouvert, vous pouvez lire comme n'importe quel objet IO. N'oubliez pas de le fermer.

Code client simple :

#!/usr/bin/python
# Fichier client.py
import socket

s = socket.socket()           # Créer un objet socket
host = socket.gethostname()   # Obtenir le nom de la machine locale
port = 12345                  # Réserver un port
s.connect((host, port))
print(s.recv(1024))
s.close()                     # Fermer le socket

Exécutez server.py en arrière-plan, puis client.py :

# Démarrer le serveur en arrière-plan
$ python server.py &
# Lancer le client
$ python client.py

Résultat :

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Modules Internet Python

Liste de modules importants pour la programmation réseau/Internet en Python :

ProtocoleFonction courantePortModule Python
HTTPPages Web80httplib, urllib, xmlrpclib
NNTPNews Usenet119nntplib
FTPTransferts de fichiers20ftplib, urllib
SMTPEnvoi d'email25smtplib
POP3Récupération d'email110poplib
IMAP4Récupération d'email143imaplib
TelnetLignes de commande23telnetlib
GopherTransferts de documents70gopherlib, urllib

Consultez toutes les bibliothèques mentionnées pour travailler avec FTP, SMTP, POP et IMAP.

Lectures complémentaires

Ce fut un démarrage rapide avec la programmation par sockets. C'est un vaste sujet. Il est recommandé de consulter :

Python

  1. Maîtriser les types de données Python : Guide pratique
  2. Maîtriser les opérateurs Python : Guide complet
  3. Maîtriser l'instruction pass en Python : Guide pratique
  4. Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
  5. Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
  6. Maîtriser la programmation orientée objet Python : classes, héritage, encapsulation et polymorphisme
  7. Maîtriser les itérateurs Python : fonctionnement et création des vôtres
  8. Les fermetures Python expliquées : comment les fonctions imbriquées capturent les variables
  9. Maîtriser Python datetime : guide pratique pour les dates, heures et fuseaux horaires