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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
from tkinter import *
import socket, sys, threading
host = '127.0.0.1'
port = 50000
class ThreadReception(threading.Thread):
"""objet thread gérant la réception des messages"""
def __init__(self, conn, widget= None):
threading.Thread.__init__(self)
self.connexion = conn # réf. du socket de connexion
self.widget = widget
def run(self):
while 1:
message_recu = self.connexion.recv(1024)
message_recu = str(message_recu,'LATIN1')+'\n'
self.widget.insert(0.0,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> :
self.widget.insert(0.0,"Client arrêté. Connexion interrompue.")
self.connexion.close()
class interface_client(Tk):
def __init__(self):
# création de la fenetre principale
self.root = Tk()
self.frame = Frame(self.root, bg = 'grey')
self.text1 = Text(self.frame,height = 10 ,width = 75) #affichage
self.scrollbar=Scrollbar(self.frame)
self.text1.configure(yscrollcommand=(self.scrollbar, 'set'))
self.scrollbar.configure(command=(self.text1, 'yview'))
self.text2 = Entry(self.frame) #ecriture
self.nombre_de_connectes = Label(self.frame,height=1,width = 2,text= '0')
self.frame.pack()
self.text1.grid()
self.scrollbar.grid(row= 0, column= 1,sticky= N+S)
self.text2.grid(row =1, sticky= E+W)
self.nombre_de_connectes.grid(row= 1, column= 1)
bouton= Button(self.frame, text = 'envoie', fg='red', command = self.envoi)
bouton.grid(row= 2)
# evenement
self.text2.bind('<Return>',self.envoi)
# Programme principal - Établissement de la connexion :
self.connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.connexion.connect((host, port))
except socket.error:
print ("La connexion a échoué.")
sys.exit()
print ("Connexion établie avec le serveur.")
#methode associée
self.recoi()# Programme principal - Établissement de la reception :
self.root.mainloop()
def recoi(self):
# Dialogue avec le serveur : on lance le thread pour gérer
# indépendamment la réception des messages :
th_R = ThreadReception(self.connexion, self.text1)
th_R.start()
def envoi(self,evt= 1):
self.evt = evt
a= self.text2.get()+'\n'
b= self.text2.get()
b= bytes(b,'LATIN1')
self.connexion.send(b)
self.text1.insert(0.0,a)
self.text2.delete(0,END)
app= interface_client() |
Partager