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
|
# -*- coding:Utf-8 -*-
# Définition d'un serveur réseau gérant un système de CHAT simplifié.
# Utilise les threads pour gérer les connexions clientes en parallèle.
HOST = '172.16.60.54'
PORT = 45000
#HOST = '127.0.0.1'
#PORT = 40000
import socket, sys, threading, getpass , time
from ConnexionBD import *
from SessionInachevee import *
from Session_J import *
class ThreadClient(threading.Thread):
'''dérivation d\'un objet thread pour gérer la connexion avec un client'''
def __init__(self, conn, adr):
threading.Thread.__init__(self)
self.connexion = conn
self.adresse = adr
def run(self):
# Dialogue avec le client :
nom = self.getName()
# Chaque thread possède un nom
msgClient = self.connexion.recv(1024).decode("Utf8")
id_post = id_poste(msgClient)
if(exisitSessionPoste(id_post) != 0):
session = Session_J("", "", "", "", "", "")
if(session.utilConnectePriorite(id_post)<5):
duree = session.dureeRestante(id_post)
if(duree > 0):
inacheve = SessionInachevee("", "", "")
inacheve.inserer(id_post, duree)
extraireSession(id_post)
miseAjourPoste(id_post, 'N')
miseAjourEnreg()
else:
self.stop()
print(msgClient)
# Fermeture de la connexion :
self.connexion.close() # couper la connexion côté serveur
del conn_client[nom] # supprimer son entrée dans le dictionnaire
print("Client %s déconnecté." % nom)
# Le thread se termine ici
def stop(self):
self.Terminated = True
# Initialisation du serveur - Mise en place du socket :
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
mySocket.bind((HOST, PORT))
except socket.error:
print("La liaison du socket à l'adresse choisie a échoué.")
sys.exit()
print("Controlleur prêt, en attente de requêtes ...")
mySocket.listen(50)
# Attente et prise en charge des connexions demandées par les clients :
conn_client = {}
# dictionnaire des connexions clients
while 1:
connexion, adresse = mySocket.accept()
# Créer un nouvel objet thread pour gérer la connexion :
th = ThreadClient(connexion, adresse)
th.start()
# Mémoriser la connexion dans le dictionnaire :
it = th.getName()
# identifiant du thread
conn_client[it] = connexion
print("Client %s connecté, adresse IP %s, port %s." %(it, adresse[0], adresse[1]))
# Dialogue avec le client :
#msg ="Vous etes connecte. Envoyez vos messages."
#connexion.send(msg.encode("Utf8")) |
Partager