Vous n'êtes pas identifié(e).
Pages : 1
Bonjour voici le script d'un serveur et d'un client, les messages ne bloquent pas graçe au module threading, il peuvent emetre ou recevoir des données sans forcement attendre une reponse.
script serveur:
import socket
import threading
import sys
class message_r(threading.Thread):
'''class qui gerent les messages recus'''
def __init__(self):
threading.Thread.__init__(self)
self.r = ''
def run(self):
while(True):
self.r = conn.recv(1024)
if(self.r == 'close'):
sys.exit()
else:
print('client: '+ self.r)
class message_e(threading.Thread):
'''class qui gerent les messages envoyer'''
def __init__(self):
threading.Thread.__init__(self)
self.e = ''
def run(self):
while(True):
self.e = raw_input('message: ')
conn.send(self.e)
print('serveur: '+ self.e)
addr = ('localhost',4444)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(addr)
s.listen(5)
if(__name__ == '__main__'):
print('en attente de client')
conn, addr = s.accept()
print('client connecter')
recu = message_r()
envoyer = message_e()
recu.start()
envoyer.start()
script client:
import socket
import threading
import sys
class message_e(threading.Thread):
'''class qui gerent messages envoyer'''
def __init__(self):
threading.Thread.__init__(self)
self.e = ''
def run(self):
while(True):
self.e = raw_input('message: ')
c.send(self.e)
print('client: '+ self.e)
if(self.e == 'close'):
sys.exit()
class message_r(threading.Thread):
'''class qui gerent les messages recus'''
def __init__(self):
threading.Thread.__init__(self)
self.r = ''
def run(self):
while(True):
self.r = c.recv(1024)
print('serveur: '+ self.r)
addr = ('localhost',4444)
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
if(__name__ =='__main__'):
c.connect(addr)
envois = message_e()
recu = message_r()
envois.start()
recu.start()
Amusez vous bien.
boost ===>>> « Un langage de programmation est une convention pour donner des ordres à un ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils. Ca, ce sont les caractéristiques de la magie. » - Dave Small
Hors ligne
Merci, je dois juste tester si ça fonctionne sur python 2 et python 3 car j'utilise les 2
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
Merci c'est cool ,un trés bon exercices pour commencer avec les socket et les threads .Je me permet quand même de rectifier quelques erreurs .
Le programme ne se ferme pas , il faut fermer les 2 thread ainsi que les socket.
def run(self):
while(True):
self.e = raw_input('message: ')
c.send(self.e)
if(self.e == 'close'):
recu._Thread__stop()
c.close()
break
print('client: '+ self.e)
Client_chat.py + serveur_chat.py
Dans l'exemple donné juste au decus le serveur peut coupé le client en lui envoyant close.
Hors ligne
Pages : 1