From 69e9816eb3073b754182000a1428c10c89fa4cdd Mon Sep 17 00:00:00 2001 From: Fred Z Date: Thu, 22 Feb 2018 22:41:23 +0100 Subject: [PATCH] Ajoute un test d'echange client/server --- networking/client.py | 29 +++++++++++++++++++++ networking/server.py | 62 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100755 networking/client.py create mode 100755 networking/server.py diff --git a/networking/client.py b/networking/client.py new file mode 100755 index 0000000..87b8913 --- /dev/null +++ b/networking/client.py @@ -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() diff --git a/networking/server.py b/networking/server.py new file mode 100755 index 0000000..2dd81fb --- /dev/null +++ b/networking/server.py @@ -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()