Programmation de socket Python - Exemple de serveur et client
Bonjour les apprenants ! Dans notre précédent tutoriel, nous avons discuté du module unittest de Python. Aujourd'hui, nous allons examiner un exemple de programmation de socket en Python. Nous allons créer des applications de serveur et de client socket en Python.
Programmation de socket en Python
Pour comprendre la programmation des sockets en Python, nous devons connaître trois sujets intéressants - Serveur de Sockets, Client de Sockets et Socket. Alors, qu'est-ce qu'un serveur ? Eh bien, un serveur est un logiciel qui attend les requêtes des clients et les traite ou les sert en conséquence. D'autre part, un client est le demandeur de ce service. Un programme client demande des ressources au serveur et le serveur répond à cette demande. Une socket est l'extrémité d'un canal de communication bidirectionnel entre le serveur et le client. Les sockets peuvent communiquer au sein 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 sur la programmation des sockets est de vous initier à la façon dont le serveur de sockets et le client communiquent entre eux. Vous apprendrez également comment écrire un programme serveur de sockets en Python.
Exemple de socket en Python
Nous avons dit plus tôt qu'un client socket demande des ressources au serveur 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 l'autre. Les étapes peuvent être considérées comme suit.
- Le programme de serveur socket Python s'exécute d'abord et attend une demande.
- Le programme client socket Python initiera la conversation au début.
- Ensuite, le programme serveur répondra en fonction des demandes du client.
- Le programme client se terminera si l'utilisateur entre le message « au revoir ». Le programme serveur se terminera également lorsque le programme client se termine, cela est optionnel et nous pouvons laisser le programme serveur fonctionner indéfiniment ou le terminer avec une commande spécifique dans la demande du client.
Serveur Socket Python
Nous allons enregistrer le programme de serveur socket en python sous le nom socket_server.py. Pour utiliser la connexion socket en python, nous devons importer le module socket. Ensuite, nous devons effectuer des tâches successivement pour établir la connexion entre le serveur et le client. Nous pouvons obtenir l'adresse 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 pour les protocoles Internet standard. Voici un exemple de code de serveur socket en python, les commentaires vous aideront à comprendre le code.
import socket
def server_program():
# get the hostname
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# look closely. The bind() function takes tuple as argument
server_socket.bind((host, port)) # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv(1024).decode()
if not data:
# if data is not received break
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()
Donc, notre serveur socket Python fonctionne sur le port 5000 et attend les demandes des clients. Si vous voulez que le serveur ne se ferme pas lorsque la connexion client est fermée, il suffit de supprimer la condition if et la déclaration break. La boucle while de Python est utilisée pour faire fonctionner le programme serveur indéfiniment et continuer à attendre les demandes des clients.
Client Socket Python
Nous allons enregistrer le programme client de socket python sous socket_client.py. Ce programme est similaire au programme serveur, excepté pour le lien. La principale différence entre le programme serveur et le programme client est que, dans le programme serveur, il doit lier l'adresse hôte et l'adresse du port ensemble. Voir l'exemple de code ci-dessous du client de socket python, les commentaires vous aideront à 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 de la programmation de sockets en Python
Pour voir la sortie, lancez d'abord le programme du serveur de sockets. Ensuite, exécutez le programme du client de sockets. Après cela, écrivez quelque chose depuis le programme client. Ensuite, écrivez à nouveau une réponse depuis le programme serveur. Enfin, écrivez au revoir depuis le programme client pour terminer les deux programmes. La vidéo ci-dessous montrera comment cela a fonctionné lors de mon test des programmes d'exemple de serveur et client de sockets.
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$
Remarque : 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é aléatoirement par l'appel de connexion du client. Dans ce cas, c'est 57822. Voilà donc tout ce qu'il faut savoir sur la programmation socket en Python, ainsi que les exemples de serveur socket Python et de client socket. Référence : Documentation officielle.

