Bonjour à tous les apprenants ! Dans notre précédent tutoriel, nous avons discuté du module Python unittest. Aujourd’hui, nous allons examiner un exemple de programmation de socket en python. Nous allons créer des applications de serveur et de client de socket en python.
Programmation de Socket en Python
Pour comprendre la programmation de socket en python, nous devons connaître trois sujets intéressants – Serveur de Socket, Client de Socket et Socket. Alors, qu’est-ce qu’un serveur ? Eh bien, un serveur est un logiciel qui attend les demandes des clients et les traite en conséquence. D’autre part, un client est un demandeur de ce service. Un programme client demande des ressources au serveur et le serveur répond à cette demande. Un socket est le point de terminaison d’un canal de communication bidirectionnel entre le serveur et le client. Les sockets peuvent communiquer à l’intérieur d’un processus, entre des processus sur la même machine ou entre des processus sur différentes machines. Pour toute communication avec un programme distant, nous devons nous connecter via un port de socket. L’objectif principal de ce tutoriel de programmation de socket est de vous introduire à la manière dont le serveur et le client de socket communiquent entre eux. Vous apprendrez également comment écrire un programme serveur de socket en python.
Exemple de Socket Python
Nous avons dit précédemment qu’un client de socket demande des ressources au serveur de socket et que le serveur répond à cette demande. Nous allons donc concevoir à la fois le modèle serveur et le modèle client afin que chacun puisse communiquer avec eux. Les étapes peuvent être considérées comme ceci.
- Le programme serveur de socket Python s’exécute d’abord et attend toute demande.
- Le programme client de socket Python initiéra la conversation en premier.
- Ensuite, le programme serveur répondra en conséquence aux demandes du client.
- Le programme client se terminera si l’utilisateur entre le message « bye ». Le programme serveur se terminera également lorsque le programme client se terminera, cela est facultatif et nous pouvons maintenir le programme serveur en cours d’exécution indéfiniment ou le terminer avec une commande spécifique dans la demande du client.
Serveur de Socket Python
Nous enregistrerons le programme du serveur socket Python sous le nom socket_server.py
. Pour utiliser la connexion socket Python, nous devons importer le module socket. Ensuite, séquentiellement, nous devons effectuer certaines tâches pour établir la connexion entre le serveur et le client. Nous pouvons obtenir l’adresse de l’hôte en utilisant la fonction socket.gethostname()
. Il est recommandé d’utiliser une adresse de port supérieure à 1024, car les numéros de port inférieurs à 1024 sont réservés aux protocoles Internet standard. Consultez le code d’exemple ci-dessous du serveur socket Python; les commentaires vous aideront à comprendre le code.
import socket
def server_program():
# obtenir le nom de l'hôte
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# regardez attentivement. La fonction bind() prend un tuple comme argument
server_socket.bind((host, port)) # bind host address and port together
# configurer le nombre de clients que le serveur peut écouter simultanément
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# recevoir le flux de données. il n'acceptera pas de paquet de données supérieur à 1024 octets
data = conn.recv(1024).decode()
if not data:
# si les données ne sont pas reçues, sortir
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode()) # send data to the client
conn.close() # close the connection
if __name__ == '__main__':
server_program()
Ainsi, notre serveur socket Python s’exécute sur le port 5000 et il attendra la demande du client. Si vous souhaitez que le serveur ne se ferme pas lorsque la connexion du client est fermée, supprimez simplement la condition if et l’instruction break. La boucle while Python est utilisée pour exécuter le programme du serveur indéfiniment et continuer à attendre la demande du client.
Client Socket Python
Nous allons enregistrer le programme client socket Python sous le nom de socket_client.py
. Ce programme est similaire au programme serveur, à l’exception de la liaison. La principale différence entre le programme serveur et le programme client est que, dans le programme serveur, il faut lier l’adresse hôte et l’adresse de port ensemble. Voyez ci-dessous un exemple de code client socket Python, le commentaire vous aidera à comprendre le code.
import socket
def client_program():
host = socket.gethostname() # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket() # instantiate
client_socket.connect((host, port)) # connect to the server
message = input(" -> ") # take input
while message.lower().strip() != 'bye':
client_socket.send(message.encode()) # send message
data = client_socket.recv(1024).decode() # receive response
print('Received from server: ' + data) # show in terminal
message = input(" -> ") # again take input
client_socket.close() # close the connection
if __name__ == '__main__':
client_program()
Sortie du Programme de Programmation Socket Python
Pour voir la sortie, exécutez d’abord le programme serveur socket. Ensuite, exécutez le programme client socket. Ensuite, écrivez quelque chose depuis le programme client. Ensuite, écrivez à nouveau une réponse depuis le programme serveur. Enfin, écrivez bye depuis le programme client pour terminer les deux programmes. La courte vidéo ci-dessous montrera comment cela a fonctionné lors de mon test du serveur socket et des exemples de programmes clients.
pankaj$ python3.6 socket_server.py
Connection from: ('127.0.0.1', 57822)
from connected user: Hi
-> Hello
from connected user: How are you?
-> Good
from connected user: Awesome!
-> Ok then, bye!
pankaj$
pankaj$ python3.6 socket_client.py
-> Hi
Received from server: Hello
-> How are you?
Received from server: Good
-> Awesome!
Received from server: Ok then, bye!
-> Bye
pankaj$
Remarquez que le serveur socket fonctionne sur le port 5000 mais le client nécessite également un port socket pour se connecter au serveur. Ce port est attribué de manière aléatoire par l’appel à la connexion du client. Dans ce cas, c’est 57822. Donc, voilà pour la programmation socket en Python, les programmes d’exemple de serveur socket Python et client socket. Référence : Documentation Officielle
Source:
https://www.digitalocean.com/community/tutorials/python-socket-programming-server-client