Programmation de sockets en Python – Exemple de serveur et de client

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.

  1. Le programme serveur de socket Python s’exécute d’abord et attend toute demande.
  2. Le programme client de socket Python initiéra la conversation en premier.
  3. Ensuite, le programme serveur répondra en conséquence aux demandes du client.
  4. 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