Ajoute les fileno des clients

- lorque qu'un nouveau client se connecte
 - sur le server les messages sont prefixes avec le fileno
This commit is contained in:
Fred Z 2018-02-23 00:34:49 +01:00
parent 69e9816eb3
commit 1094327e31

View File

@ -9,28 +9,38 @@ Networking test, client-server talking script
import socket import socket
import select import select
hote = '' HOST = ''
port = 12800 PORT = 12800
main_connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) MSG_NEW_CLIENT = "Nouveau client: {}"
main_connection.bind((hote, port)) MSG_CLIENT_ID = "Client[{}] {}"
main_connection.listen(5)
print("Le serveur écoute à présent sur le port {}".format(port)) MAIN_CONNECTION = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
MAIN_CONNECTION.bind((HOST, PORT))
MAIN_CONNECTION.listen(5)
print("Le serveur écoute à présent sur le PORT {}".format(PORT))
server_on = True server_on = True
connected_clients = [] connected_clients = []
while server_on: while server_on:
# On va vérifier que de nouveaux clients ne demandent pas à se connecter # On va vérifier que de nouveaux clients ne demandent pas à se connecter
# Pour cela, on écoute la main_connection en lecture # Pour cela, on écoute la MAIN_CONNECTION en lecture
# On attend maximum 50ms # On attend maximum 50ms
requested_connections, wlist, xlist = select.select([main_connection], requested_connections, wlist, xlist = select.select(
[], [], 0.05) [MAIN_CONNECTION],
[], [], 0.05
)
for connexion in requested_connections: for connexion in requested_connections:
client_connection, infos_connexion = connexion.accept() client_connection, infos_connexion = connexion.accept()
# On ajoute le socket connecté à la liste des clients # On ajoute le socket connecté à la liste des clients
connected_clients.append(client_connection) connected_clients.append(client_connection)
# id client
fileno = client_connection.fileno()
print(MSG_NEW_CLIENT.format(fileno))
# Maintenant, on écoute la liste des clients connectés # Maintenant, on écoute la liste des clients connectés
# Les clients renvoyés par select sont ceux devant être lus (recv) # Les clients renvoyés par select sont ceux devant être lus (recv)
# On attend là encore 50ms maximum # On attend là encore 50ms maximum
@ -39,19 +49,25 @@ while server_on:
# Peut être levée # Peut être levée
read_client_list = [] read_client_list = []
try: try:
read_client_list, wlist, xlist = select.select(connected_clients, read_client_list, wlist, xlist = select.select(
[], [], 0.05) connected_clients,
[], [], 0.05
)
except select.error: except select.error:
pass pass
else: else:
# On parcourt la liste des clients à lire # On parcourt la liste des clients à lire
for client in read_client_list: for client in read_client_list:
# Client est de type socket # Client est de type socket
msg_recu = client.recv(1024) msg_recu = client.recv(1024)
# Peut planter si le message contient des caractères spéciaux # Peut planter si le message contient des caractères spéciaux
msg_recu = msg_recu.decode() msg_recu = msg_recu.decode()
print("Reçu {}".format(msg_recu))
client.send(b"-ok-") client.send(b"-ok-")
print(MSG_CLIENT_ID.format(client.fileno(), msg_recu))
if msg_recu == "fin": if msg_recu == "fin":
server_on = False server_on = False
@ -59,4 +75,4 @@ print("Fermeture des connexions")
for client in connected_clients: for client in connected_clients:
client.close() client.close()
main_connection.close() MAIN_CONNECTION.close()