Bonsoir,
Je voudrais faire un éspèce de chat en ligne pour discuter avec mes copains. J'ai cherché sur le Web et j'ai trouvé ces deux codes :
le premier pour le serveur:
et le deuxième pour le client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 # -*- coding: cp1252 -*- # 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 = '192.168.1.53' PORT = 8888 import socket, sys, threading class ThreadClient(threading.Thread): '''dérivation d'un objet thread pour gérer la connexion avec un client''' def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): # Dialogue avec le client : nom = self.getName() # Chaque thread possède un nom while 1: msgClient = self.connexion.recv(1024) if msgClient.upper() == "FIN" or msgClient =="": break message = "%s> %s" % (nom, msgClient) print message # Faire suivre le message à tous les autres clients : for cle in conn_client: if cle != nom: # ne pas le renvoyer à l'émetteur conn_client[cle].send(message) # 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 # 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 "Serveur prêt, en attente de requêtes ..." mySocket.listen(5) # 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) 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 : connexion.send("Vous êtes connecté. Envoyez vos messages.")
Ceci marche très bien, mais ça marche qu'avec mon pc (je dois éxécuter les deux en même temps ) et je voudrais, par exemple, que j'écrive a mon ami en mode "chacun chez soit". Je pense qu'il faudrait plutôt un serveur Web, qui ferait "l'interlocuteur" entre moi et mon ami. J'ai cherché sur internet comment mettre en place un serveur Web, j'éxécute le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 # -*- coding: cp1252 -*- # Définition d'un client réseau gérant en parallèle l'émission # et la réception des messages (utilisation de 2 THREADS). host = '192.168.1.53' port = 8888 import socket, sys, threading class ThreadReception(threading.Thread): """objet thread gérant la réception des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # réf. du socket de connexion def run(self): while 1: message_recu = self.connexion.recv(1024) print message_recu if message_recu =='' or message_recu.upper() == "FIN": break # Le thread <réception> se termine ici. # On force la fermeture du thread <émission> : th_E._Thread__stop() print "Client arrêté. Connexion interrompue." self.connexion.close() class ThreadEmission(threading.Thread): """objet thread gérant l'émission des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # réf. du socket de connexion def run(self): while 1: message_emis = raw_input() self.connexion.send(message_emis) # Programme principal - Établissement de la connexion : connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: connexion.connect((host, port)) except socket.error: print "La connexion avec le serveur a échoué. Le serveur est peut-être en maintenance ou vérifiez votre connexion, puis réessayer" sys.exit() print "Connexion établie avec le serveur. En attente d'autre personne" # Dialogue avec le serveur : on lance deux threads pour gérer # indépendamment l'émission et la réception des messages : th_E = ThreadEmission(connexion) th_R = ThreadReception(connexion) th_E.start() th_R.start()
Donc ça me marque Serveur actif sur le port 8888, oui, et après, que faut-il que je fasse ? Je vous remercie d'avance, j'avoue que je suis un peu perdu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #!/usr/bin/python import BaseHTTPServer import CGIHTTPServer PORT = 8888 server_address = ("", PORT) server = BaseHTTPServer.HTTPServer handler = CGIHTTPServer.CGIHTTPRequestHandler handler.cgi_directories = ["/"] print "Serveur actif sur le port :", PORT httpd = server(server_address, handler) httpd.serve_forever()
Partager