GNU/Linux >> Tutoriels Linux >  >> Linux

Guide pratique :programmation de sockets en Python

Présentation

La programmation de réseau et de communication est une utilisation particulièrement puissante de tout langage de programmation. Il est beaucoup plus courant de nos jours que les ordinateurs s'interfacent entre eux (ou avec un réseau entier, comme Internet) qu'il ne l'est pour une machine d'agir seule, et savoir exactement comment cette communication a lieu est une compétence importante pour tout programmeur. Si vous êtes un passionné de Python, vous savez peut-être que Python possède plusieurs bibliothèques complètes conçues pour simplifier la programmation réseau.
.

Prérequis

  • Toute version de Python (consultez notre guide d'installation de Python 2.7 dans Centos)
  • Compréhension de base de Python

Prises

L'une des bibliothèques d'importation les plus élémentaires et les plus utiles est le socket bibliothèque. Il permet au programmeur de définir, créer, utiliser et détruire des connexions réseau appelées sockets .

Alors qu'est-ce qu'est exactement une prise ? En termes de réseau, un socket est le point de terminaison d'une connexion, défini par une adresse IP et un numéro de port. Une connexion utilise une paire de sockets :source et destination.

Les programmes utilisent normalement des sockets pour permettre à deux ordinateurs de communiquer. Les sockets peuvent également être utilisés pour transmettre des données entre différentes applications ou même différentes parties du même programme. Nous pouvons démontrer comment un socket fonctionne avec deux applications ou deux parties distinctes d'une application en cours d'exécution :une partie serveur, qui écoute les connexions, et une partie client, qui tente de se connecter à un serveur. Lorsque votre ordinateur demande une page Web, par exemple, il ouvre un socket, le liant généralement au port 80 (pour HTTP), et se connecte à un serveur Web, en utilisant le même identifiant de port et de socket. Toutes les communications associées passent par ce point de terminaison. Lorsque la communication est terminée, le client ferme le socket et la connexion à laquelle il est lié.

La bibliothèque de sockets en Python est bien développée et facile à utiliser. Pour utiliser la bibliothèque, mettez import socket au début de votre programme. Cette commande donne à votre programme l'accès à toutes les fonctions incluses de la bibliothèque de sockets, telles que socket() (créer un nouvel objet socket), socketpair() (créer une paire de nouveaux objets socket), et gethostbyname() (mapper un nom d'hôte à son adresse IP), pour n'en nommer que quelques-uns.
.

Expérimenter avec la bibliothèque de sockets

Pour expérimenter les sockets sur notre machine locale, nous allons écrire un script Python pour créer une application serveur qui crée un socket ouvert. Ensuite, nous exécuterons ce code et, dans une autre fenêtre de terminal, telnet à notre machine locale (sur localhost) en utilisant le port que nous avons ouvert dans le script du serveur.

Commençons par un script que nous appellerons server.py . Ce programme ouvrira un socket, le liera à un port et à un protocole, puis écoutera les connexions.

import socket # (1)  
host = '' # (2)  
port = 1234 # (3)  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # (4)  
s.bind((host, port)) # (5)  

print 'Socket created' # (6)  
s.listen(10) # (7)  
print 'Socket listening' # (8)  

conn, addr = s.accept() # (9)  

print 'Connected with ' + addr[0] + ':' + str(addr[1]) # (10)  

Enregistrez ce fichier sous server.py . Dans une fenêtre de terminal (ou à l'invite de commande, si vous utilisez Windows), accédez à l'emplacement de votre fichier et exécutez-le.

python server.py

Laissez-le fonctionner et ouvrez une deuxième fenêtre de terminal. Dans cette fenêtre, initiez une connexion telnet à l'hôte local sur le port 1234.

telnet localhost 1234

Une fois qu'il se connecte, vous devriez voir la fenêtre de terminal d'origine imprimer "Connecté avec 127.0.0.1:60426" ou quelque chose de similaire, tandis que votre fenêtre client affichera brièvement "Connecté à localhost" avant que la connexion ne se termine.
.

Ce que fait le code de socket

Alors que se passe-t-il ici ? Regardons chaque ligne :

La ligne (1) importe le socket bibliothèque et la met à disposition. Les lignes (2) et (3) définissent des variables pour host et port , respectivement. L'host vide variable (c'est une chaîne vide entourée de guillemets simples, d'ailleurs, PAS de guillemets doubles) signifie que l'application serveur écoutera sur toutes les interfaces disponibles, y compris localhost, qui est celle que nous utiliserons pour nous connecter.

La ligne (4) crée le socket lui-même, en utilisant deux paramètres. Le premier paramètre, AF_INET , signifie que nous utilisons des adresses IPv4 (par opposition aux adresses IPv6). Le deuxième paramètre, SOCK_STREAM , signifie que ce socket utilisera des paquets TCP (le trafic UDP utilise le type SOCK_DGRAM et fonctionne un peu différemment, mais cela dépasse le cadre de cet article). La ligne (5) lie le socket que nous avons créé au (host, port) tuple.

La ligne (7) indique au programme d'écouter les connexions au socket que nous avons lié à la ligne (5). Le 10 indique que le serveur acceptera jusqu'à 10 connexions avant de refuser un client.

La ligne (9) affecte des variables à la connexion une fois que le serveur accepte une connexion. La ligne (10) imprime l'adresse IP et le numéro de port du client qui a établi la connexion avec le serveur.
.

Garder la prise ouverte

Lorsque nous avons testé ce code, nous avons vu que le serveur fermait la connexion immédiatement, ce qui n'est pas particulièrement utile. Afin que nous puissions voir les données transférées dans les deux sens via la connexion, nous ajouterons quatre lignes de code à notre server.py programme.

data = conn.recv(1024) # 11  
conn.sendall(data) # 12  
conn.close() # 13  
s.close() # 14  

Encore une fois, si vous exécutez ce code dans une fenêtre de terminal, puis vous connectez (depuis un autre terminal) avec telnet localhost 1234 , vous vous connecterez à localhost, mais cette fois la connexion restera ouverte. Tapez un mot dans la fenêtre telnet puis appuyez sur Return; le mot sera renvoyé sur ce même écran, puis la connexion se fermera.

A la ligne (11), les data variable stocke les données reçues via la connexion.

La ligne (12) renvoie ces données via la connexion au client, en lui faisant écho, en d'autres termes.

Enfin, les lignes (13) et (14) pratiquent un peu de ménage en fermant la connexion et en détruisant le socket - ce n'est jamais une mauvaise idée, surtout lors du codage d'une application basée sur un socket qui sera diffusée dans la nature.
.

Conclusion

Ce script est un exemple très basique de création d'une connexion réseau à l'aide du socket de Python. module, communiquez via la connexion, puis fermez-la à nouveau. Bien qu'une application complète soit beaucoup plus compliquée, la structure de communication de base - et la théorie qui la sous-tend - reste la même.

Nous espérons que vous avez apprécié ce didacticiel et que vous en avez suffisamment appris pour commencer à travailler avec les sockets en Python. N'oubliez pas de revenir pour plus de tutoriels et de découvrir nos solutions d'hébergement VPS fiables.
.
.


Linux
  1. Comment installer Python sur Linux

  2. Comment installer NumPy

  3. Comment mettre à niveau Python vers 3.9

  4. Comment installer Python 3 sur Ubuntu 18.04 ou 20.04

  5. Comment installer Python 3 sur Windows 10

Comment installer Python 3.8 sur Debian 10

Comment vérifier la version de Python

Comment installer Python 3.9 sur Debian 11

Comment installer Python 3.11 sur Ubuntu 20.04

Comment installer Python 3.9 sur Debian 11

Comment exécuter un script Python en PHP