1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
import socket, sys, threading
from time import sleep
HOST = ""
PORT = 55555
class ThreadClient(threading.Thread):
"""gérer connexion client"""
def __init__(self, conn):
threading.Thread.__init__(self)
self.connexion2 = conn
def run(self):
#global dictionnairePseudo
#Dialogue vec le client
nom = self.getName()
while True:
try:
msgClient = self.connexion2.recv(1024).decode()
except socket.error:
break
if msgClient.lower() == "fin":
break
msgClient2 = msgClient.split("&#&#")
if msgClient2[0] == "Pseudo":
if msgClient2[1].lower() in Utilisateurbanni:
Banni(msgClient2[1])
return None
else:
dictionnairePseudo[nom] = msgClient2[1]
#print("connexion: " + str(len(conn_client)) + "; " + str(conn_client))
print(f"\033[0;36mClient {dictionnairePseudo[nom]} ({nom}) connecté avec l'adresse IP {adresse[0]} et le port {adresse[1]}\n {len(conn_client)} connectés\033[0m")
#print()
message = "\033[0;31mServeur\033[0m > Vous êtes connecté... Vous pouvez désormais envoyer des messages"
connexion.send(message.encode())
else:
msg = dictionnairePseudo[nom] + " > " + msgClient
print(msg)
#envoyer le message à tout les autres clients
for cle in conn_client:
if cle != nom:
conn_client[cle].send(msg.encode())
#femeture connexion
del conn_client[nom]
#print("déconnexion: " + str(len(conn_client)) + "; " + str(conn_client))
print(f"""\033[0;31Client "{dictionnairePseudo[nom]}" ({nom}) déconnecté\n {len(conn_client)} connectés\033[0m""")
#print()
del dictionnairePseudo[nom]
self.connexion2.close()
def Banni(Pseudo= ""):
if Pseudo:
Pseudo = " (" + Pseudo + ")"
try:
connexion.send("\033[0;31mServeur > Vous avez été banni, vous ne pouvez pas vous connecter !\033[0m".encode())
except socket.error:
pass
sleep(0.5)
print(f"\033[0;31mle Client {adresse[0] + Pseudo} a tenté de se connecter alors qu'il est banni\033[0m")
connexion.close()
#Initialisation serveur
connexionPrincipale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
connexionPrincipale.bind((HOST,PORT))
except socket.error:
print("\033[0;31mLa liaison a échoué...\033[0m")
sys.exit()
print("Serveur prêt, en attente de requêtes...")
connexionPrincipale.listen(1)
#attente de connexion
conn_client = {}
dictionnairePseudo = {}
Utilisateurbanni = []
Utilisateurbanni = ["192.168.1.10","test",test2"]
while True:
connexion, adresse = connexionPrincipale.accept()
if adresse[0] in Utilisateurbanni:
Banni()
else:
thread = ThreadClient(connexion)
# Mémorise la connexion
id = thread.getName()
#print(id)
conn_client[id] = connexion
#demarre les échanges
thread.start() |
Partager