user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 14-09-2013 14:58:31

boost
Membre

socket et threading, messages non bloquant

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

#2 14-09-2013 15:22:00

IceF0x
#! Gourou Linux

Re : socket et threading, messages non bloquant

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

#3 17-11-2013 14:50:41

manon
#! Crunchikette #!

Re : socket et threading, messages non bloquant

Merci c'est cool ,un trés bon exercices pour commencer avec les socket et les threads big_smile .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

Pied de page des forums