Accueil > > > MESSAGERIE SUR LE PRINCIPE CLIENT/SERVEUR
MESSAGERIE SUR LE PRINCIPE CLIENT/SERVEUR
Information sur la source
Description
Normalement tout fonctionne, sauf qu'il faut paramétrer le HOST dans le client. Dans le code du serveur ce n'est pas nécessaire. On peut également modifier le port. Si vous êtes derrière un routeur, n'oubliez pas de router le port correspondant pour que les clients puissent se connecter au serveur. Certes ce n'est graphiquement pas très beau mais c'est fonctionnel :D C'est mon premier code, dites tout ce que vous avez à dire !
Source
- #Serveur de messagerie pour systeme Unix créé par PGMSmurf alias MOY
- # -*- coding: latin1 -*-
-
- from socket import *
- from sys import *
- from threading import *
-
- HOST = ''
- PORT = 54725
-
- print "\x1B[1;36;40]"
-
- class ThreadClient(Thread):
- #Gestion des connexions client#
- def __init__(self, conn):
- Thread.__init__(self)
- self.connexion = conn
-
- def run(self):
- #Dialogue avec le Client
- nom = self.getName() #Recuperation du nom du thread
- msgClient = self.connexion.recv(1024)
- #Gestion des pseudos
- self.nick = msgClient[8:]
- nick_dic[nom] = self.nick
- print self.nick + " vient de se connecter !"
- for clef in conn_client:
- if clef != nom :
- conn_client[clef].send(self.nick + " vient de se connecter !")
- while 1:
- msgClient = self.connexion.recv(1024)
- if msgClient.upper() == '/QUIT' :
- break
- sys.exit()
- message = self.nick + ": %s" % (msgClient)
- print message
- #Envoi du message à tous les clients
- for cle in conn_client:
- if cle != nom :
- conn_client[cle].send(message)
- #Fermeture de la connexion
- self.connexion.close() #Plus de connexion cote serveur
- del conn_client[nom] #Plus d'entree dans le dictionnaire
- del nick_dic[nom]
- print "Client %s déconnecté." % nom
- #FIN DU THREAD
- #Mise en place du socket
- sock = socket(AF_INET, SOCK_STREAM)
- try:
- sock.bind((HOST, PORT))
- except socket:
- print "La connexion a échouée."
- sys.exit()
- print "Attente de connexions clientes"
- sock.listen(100)
- #Attente de connexions client
- conn_client = {} #Creation du dictionnaire de connexion
- nick_dic = {} #Creation du dictionnaire de pseudos en fonction de la connexion
- while 1:
- connexion, adresse = sock.accept()
- #nouveau thread pour la connexion
- th = ThreadClient(connexion)
- th.start()
- #Memorisation de la connexion dans le dictionnaire
- id = th.getName() #nom du thread
- conn_client[id] = connexion
- #Enregistrement du nick
- print "Client %s connecté, IP %s, port %s." % (id, adresse[0], adresse[1])
- #Dialogue avec le client
- connexion.send("Vous êtes connecté. Vous pouvez communiquer")
-
- #Client Python adapté au serveur sus-cité créé par PGMSmurf alias MOY
- # -*- coding: latin1 -*-
-
- from socket import *
- from sys import *
- from threading import *
-
- HOST = 'ip_du_serveur'
- PORT = 54725
-
- print "Entrez votre pseudo :"
- nick = raw_input()
-
- class ThreadReception(Thread):
- #Gestion de la reception des messages#
- def __init__(self, conn):
- Thread.__init__(self)
- self.connexion = conn #Socket de connexion
-
- def run(self):
- while 1:
- message_recu = self.connexion.recv(1024)
- if message_recu[-11:-2] == "connecter":
- print "\x1B[1;32;40m"
- print "*" + message_recu + "*"
- print "\x1B[0;37;40m"
- else:
- print "\x1B[0;36;40m"
- print "*" + message_recu + "*"
- print "\x1B[0;37;40m"
- if message_recu.upper() == nick + ': /QUIT' or message_recu == "":
- break
- sys.exit()
- #Fin du thread de réception
- #Forcer la fermueture du thread
- th_R._Thread__stop()
- print "Client arrêté, connexion imterrompue"
- self.connexion.close()
- class ThreadEmission(Thread):
- #Emission de messages
- def __init__(self, conn):
- Thread.__init__(self)
- self.connexion = conn #socket de connexion
- def run(self):
- while 1:
- message_emis = raw_input()
- if message_emis != "":
- self.connexion.send(message_emis)
- #Emission terminée
-
- #Thread Principal
- connexion = socket(AF_INET, SOCK_STREAM)
- #Connexion au serveur :
- try:
- connexion.connect((HOST, PORT))
- except socket:
- print "La connexion a echouée"
- sys.exit()
- print "Connexion établie !"
- connexion.send("nickname" + nick)
- #connexion.send(nick + " vient de se connecter !")
-
- #Lancement des threads
- th_E = ThreadEmission(connexion)
- th_R = ThreadReception(connexion)
- th_E.start()
- th_R.start()
#Serveur de messagerie pour systeme Unix créé par PGMSmurf alias MOY
# -*- coding: latin1 -*-
from socket import *
from sys import *
from threading import *
HOST = ''
PORT = 54725
print "\x1B[1;36;40]"
class ThreadClient(Thread):
#Gestion des connexions client#
def __init__(self, conn):
Thread.__init__(self)
self.connexion = conn
def run(self):
#Dialogue avec le Client
nom = self.getName() #Recuperation du nom du thread
msgClient = self.connexion.recv(1024)
#Gestion des pseudos
self.nick = msgClient[8:]
nick_dic[nom] = self.nick
print self.nick + " vient de se connecter !"
for clef in conn_client:
if clef != nom :
conn_client[clef].send(self.nick + " vient de se connecter !")
while 1:
msgClient = self.connexion.recv(1024)
if msgClient.upper() == '/QUIT' :
break
sys.exit()
message = self.nick + ": %s" % (msgClient)
print message
#Envoi du message à tous les clients
for cle in conn_client:
if cle != nom :
conn_client[cle].send(message)
#Fermeture de la connexion
self.connexion.close() #Plus de connexion cote serveur
del conn_client[nom] #Plus d'entree dans le dictionnaire
del nick_dic[nom]
print "Client %s déconnecté." % nom
#FIN DU THREAD
#Mise en place du socket
sock = socket(AF_INET, SOCK_STREAM)
try:
sock.bind((HOST, PORT))
except socket:
print "La connexion a échouée."
sys.exit()
print "Attente de connexions clientes"
sock.listen(100)
#Attente de connexions client
conn_client = {} #Creation du dictionnaire de connexion
nick_dic = {} #Creation du dictionnaire de pseudos en fonction de la connexion
while 1:
connexion, adresse = sock.accept()
#nouveau thread pour la connexion
th = ThreadClient(connexion)
th.start()
#Memorisation de la connexion dans le dictionnaire
id = th.getName() #nom du thread
conn_client[id] = connexion
#Enregistrement du nick
print "Client %s connecté, IP %s, port %s." % (id, adresse[0], adresse[1])
#Dialogue avec le client
connexion.send("Vous êtes connecté. Vous pouvez communiquer")
#Client Python adapté au serveur sus-cité créé par PGMSmurf alias MOY
# -*- coding: latin1 -*-
from socket import *
from sys import *
from threading import *
HOST = 'ip_du_serveur'
PORT = 54725
print "Entrez votre pseudo :"
nick = raw_input()
class ThreadReception(Thread):
#Gestion de la reception des messages#
def __init__(self, conn):
Thread.__init__(self)
self.connexion = conn #Socket de connexion
def run(self):
while 1:
message_recu = self.connexion.recv(1024)
if message_recu[-11:-2] == "connecter":
print "\x1B[1;32;40m"
print "*" + message_recu + "*"
print "\x1B[0;37;40m"
else:
print "\x1B[0;36;40m"
print "*" + message_recu + "*"
print "\x1B[0;37;40m"
if message_recu.upper() == nick + ': /QUIT' or message_recu == "":
break
sys.exit()
#Fin du thread de réception
#Forcer la fermueture du thread
th_R._Thread__stop()
print "Client arrêté, connexion imterrompue"
self.connexion.close()
class ThreadEmission(Thread):
#Emission de messages
def __init__(self, conn):
Thread.__init__(self)
self.connexion = conn #socket de connexion
def run(self):
while 1:
message_emis = raw_input()
if message_emis != "":
self.connexion.send(message_emis)
#Emission terminée
#Thread Principal
connexion = socket(AF_INET, SOCK_STREAM)
#Connexion au serveur :
try:
connexion.connect((HOST, PORT))
except socket:
print "La connexion a echouée"
sys.exit()
print "Connexion établie !"
connexion.send("nickname" + nick)
#connexion.send(nick + " vient de se connecter !")
#Lancement des threads
th_E = ThreadEmission(connexion)
th_R = ThreadReception(connexion)
th_E.start()
th_R.start()
Conclusion
Un bug a été observé : lors d'une connexion par telnet sur le serveur, la commande /quit ne fonctionne pas et le serveur plante lorsque le terminal est fermé. Donc éviter ce mode de fonctionnement pour l'instant. Je tenterai de mettre à jour ce code qui, à mon avis, est loin d'être achevé. Si vous voulez des renseignements pgmsmurf@gmail.com Pour ce qui est du niveau j'ai mis débutant par ignorance ...
Historique
- 19 avril 2006 22:09:22 :
- J'avais laissé mon ip dans la source ... peu sérieux non ?
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
serveur python et client visual basic [ par vinz973 ]
bonjour je souhaite créer un serveur en python (socket) qui recoive des données d'une client en visual basic (winsock ) en TCP le probl
Python er Threads [ par dirthangel ]
Salut a tous je suis programmeur perl, j'aimerais savoir si les threads en python sont stable ? car c'est un vraie problème en Perl merci !!!
Socket Python en SSL et Jabber [ par superzero93 ]
Bonsoir à tousJ'ai installé un serveur XMPP Jabber sur une machine virtuelle Debian Lenny 32 bits (noyau 2.6.29 et sans interface graphique), et un cl
comparaison adresse reseau [ par carlito84 ]
Bonjour tout le monde, Voilà je dois écrire un script sur python qui me permette de comparer des adresses reseau entre elles du type: @1 = x1.x
ip et reseau local [ par xilure ]
comment en python peut on trouver l'adresse IP d'un PC ? cela pour faire un chat sur un reseau local du meme type que celui ci http://www.siteduzero.c
serveur local redirigé vers page web [ par alix20 ]
Bojour à tous,voilà, je suis complètement débutante en python (je découvre python grace à Swinnen) et j'ai une question qui semblera peut-être ridicul
installation d'une base de données sur un serveur distant en utilisant Python et le CMS Mzalendo) [ par malaouii ]
Bonjour, Comment peut on installer une base de données sur un serveur distant en utilisant Python et le CMS Mzalendo
interface Python [ par abdousmi ]
bjr tt le monde, j'ai un problème au niveau de saisir les caractères de tifinagh (Amazigh) dans une champs de texte d'une interface graphique creer
Python et C++ [ par CoMpLeX ]
Voila je souhaiterai interfacer une appli python et c++ de la manière suivante : Un script python que je lance depuis un programe c++, et qui se comp
creer un executable python à faire fonctionner sous windows [ par marcus034 ]
Bonjour, Nouvel utilisateur de python, je n'arrive pas à exécuter un script python (créé sous idle de mandrake) sous windows
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|