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:
parent
69e9816eb3
commit
1094327e31
|
@ -9,28 +9,38 @@ Networking test, client-server talking script
|
|||
import socket
|
||||
import select
|
||||
|
||||
hote = ''
|
||||
port = 12800
|
||||
HOST = ''
|
||||
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))
|
||||
MSG_NEW_CLIENT = "Nouveau client: {}"
|
||||
MSG_CLIENT_ID = "Client[{}] {}"
|
||||
|
||||
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
|
||||
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
|
||||
# Pour cela, on écoute la MAIN_CONNECTION en lecture
|
||||
# On attend maximum 50ms
|
||||
requested_connections, wlist, xlist = select.select([main_connection],
|
||||
[], [], 0.05)
|
||||
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)
|
||||
|
||||
# id client
|
||||
fileno = client_connection.fileno()
|
||||
print(MSG_NEW_CLIENT.format(fileno))
|
||||
|
||||
# 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
|
||||
|
@ -39,19 +49,25 @@ while server_on:
|
|||
# Peut être levée
|
||||
read_client_list = []
|
||||
try:
|
||||
read_client_list, wlist, xlist = select.select(connected_clients,
|
||||
[], [], 0.05)
|
||||
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-")
|
||||
|
||||
print(MSG_CLIENT_ID.format(client.fileno(), msg_recu))
|
||||
|
||||
if msg_recu == "fin":
|
||||
server_on = False
|
||||
|
||||
|
@ -59,4 +75,4 @@ print("Fermeture des connexions")
|
|||
for client in connected_clients:
|
||||
client.close()
|
||||
|
||||
main_connection.close()
|
||||
MAIN_CONNECTION.close()
|
||||
|
|
Loading…
Reference in New Issue