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
| #!/usr/bin/env python
#-*-coding:Utf-8-*-
# Définition d'un client réseau gérant en parallèle l'émission
# et la réception des messages (utilisation de 2 THREADS).
ip = raw_input("Entrez le numéro du pc serveur : ")
HOST = "192.168.0.%s" % (ip)
port = 40000
import socket, sys, threading
# Classe permettant la gestion du thread s'occupant de la réception du message.
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()
# Classe permettant la gestion du thread s'occupant de l'émission du message.
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)
# Établissement de la connexion :
connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
connexion.connect((host, port))
except socket.error:
print "La connexion a échoué."
sys.exit()
print "Connexion établie avec le serveur BlackWater."
# 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() |
Partager