Ajoute un test d'echange client/server

This commit is contained in:
Fred Z 2018-02-22 22:41:23 +01:00
parent eb017b2790
commit 69e9816eb3
2 changed files with 91 additions and 0 deletions

29
networking/client.py Executable file
View File

@ -0,0 +1,29 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
client.py
Networking test, client-server talking script
"""
import socket
hote = "localhost"
port = 12800
connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connexion_avec_serveur.connect((hote, port))
print("Connexion établie avec le serveur sur le port {}".format(port))
msg_a_envoyer = b""
while msg_a_envoyer != b"fin":
msg_a_envoyer = input("> ")
# Peut planter si vous tapez des caractères spéciaux
msg_a_envoyer = msg_a_envoyer.encode()
# On envoie le message
connexion_avec_serveur.send(msg_a_envoyer)
msg_recu = connexion_avec_serveur.recv(1024)
print(msg_recu.decode()) # Là encore, peut planter s'il y a des accents
print("Fermeture de la connexion")
connexion_avec_serveur.close()

62
networking/server.py Executable file
View File

@ -0,0 +1,62 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
server.py
Networking test, client-server talking script
"""
import socket
import select
hote = ''
port = 12800
main_connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
main_connection.bind((hote, port))
main_connection.listen(5)
print("Le serveur écoute à présent sur le port {}".format(port))
server_on = True
connected_clients = []
while server_on:
# On va vérifier que de nouveaux clients ne demandent pas à se connecter
# Pour cela, on écoute la main_connection en lecture
# On attend maximum 50ms
requested_connections, wlist, xlist = select.select([main_connection],
[], [], 0.05)
for connexion in requested_connections:
client_connection, infos_connexion = connexion.accept()
# On ajoute le socket connecté à la liste des clients
connected_clients.append(client_connection)
# Maintenant, on écoute la liste des clients connectés
# Les clients renvoyés par select sont ceux devant être lus (recv)
# On attend là encore 50ms maximum
# On enferme l'appel à select.select dans un bloc try
# En effet, si la liste de clients connectés est vide, une exception
# Peut être levée
read_client_list = []
try:
read_client_list, wlist, xlist = select.select(connected_clients,
[], [], 0.05)
except select.error:
pass
else:
# On parcourt la liste des clients à lire
for client in read_client_list:
# Client est de type socket
msg_recu = client.recv(1024)
# Peut planter si le message contient des caractères spéciaux
msg_recu = msg_recu.decode()
print("Reçu {}".format(msg_recu))
client.send(b"-ok-")
if msg_recu == "fin":
server_on = False
print("Fermeture des connexions")
for client in connected_clients:
client.close()
main_connection.close()