Bonjour,j'ai fait un petit scripte, que me permet soit d'etre un serveur ou un clien, et d'envoyer des message (chat en reseau)
Mais voila, quand je suis serveur, le faite de mettre while 1 (je pense
que c'est sa le probleme), fait que mon interface garphique est
unitilisable.
je vous donne mon scripte:
########################################
import socket
import sys
from Tkinter import*
from os import system
import time
HOST = "***.****.***" # Serveur local uniquement, adresse par default
#(mettez la votre, cela vous permettra de ne pas avoir à la remetre a chaque fois que vous lancez le code)
PORT = 5000 #port par default
def
valide():
#apres avoir remplis le "formulaire", on valide les données
global HOST,PORT,etreserveur,sock,serveur,name
if ipE.get() != "":
HOST=ipE.get()
if portE.get()!="":
PORT=int(portE.get())
if etreserveur==1: #je serais serveur
serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
serveur.bind((HOST, PORT))
a=0
except:
ist.configure(text='Erreure dans la liaison')
a=1
if a==0:
serveur.listen(4)
boum.config(state=ACTIVE)
bous.config(state=DISABLED)
c4.config(state=DISABLED)
ipE.config(state=DISABLED)
portE.config(state=DISABLED)
nameE.config(state=DISABLED)
service_serveur()
else: #je serais client
a=0
try:
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
a=1
except:
ist.configure(text='pas de serveur')
if a==1:
if nameE.get()!="":
name=nameE.get()
boum.config(state=ACTIVE)
bous.config(state=DISABLED)
c4.config(state=DISABLED)
ipE.config(state=DISABLED)
portE.config(state=DISABLED)
nameE.config(state=DISABLED)
class service_serveur: #mise en marche du serveur+ecoute
def __init__(s): #on lance la connection (creation serveur)
global HOST,PORT,etreserveur,sock,serveur,name
if ipE.get() != "":
HOST=ipE.get()
if portE.get()!="":
PORT=int(portE.get())
serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
serveur.bind((HOST, PORT))
ist.configure(text='Vous etes serveur')
except:
ist.configure(text='Erreure dans la liaison')
serveur.listen(4)
s.ecoute()
def
ecoute(s):
#ecoute sur la ligne
global HOST,PORT,etreserveur,sock,serveur,name
while 1:
ist.configure(text= 'attente de connexion')
connexion, addr = serveur.accept() # On attend que
quelqu'un se connecte
ist.configure(text='un client '+name+' (%s) s est connecte' %
(addr[0],))
while 1:
msg = connexion.recv(1000) # On lit ce que le client
envoie
if msg ==
"":
# Les messages vides indiquent les fins de connexions generalement
ist.configure(text='client deconecté')
# On retourne attendre une connexion
break
print msg
ist.configure(text=msg)
def servchoix(): #valeur check button
global etreserveur
etreserveur= servariable.get()
if etreserveur==0:
ist.configure(text='vous voulez etre clients')
else:
ist.configure(text='vous voulez etre serveur')
def envoye(event): #envoie message client /serveur avec Return
global HOST,PORT,etreserveur,sock,code,message,nameE
msg=msgE.get()
msgE.delete(0,1000)
message=msg+" \n "+message
ist.configure(text=message)
sock.send(name+' envoie a '+str(time.asctime()[10:20])+"ce message : "+msg)
def envoyeb(): #envoie message client /serveur avec boutton
global HOST,PORT,etreserveur,sock,code,message,nameE
msg=msgE.get()
msgE.delete(0,1000)
message=msg+" \n "+message
ist.configure(text=message)
sock.send(name+' envoie a '+str(time.asctime()[10:20])+"ce message : "+msg)
#####mise en page & variables
name='inconue'
serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
etreserveur=0
sock=0
message="vous voulez etre client"
fen=Tk()
fen.title('envoie sur un serveur')
fen.configure(bg="black")
ipE=Entry(fen,bg="yellow",fg="black",font=('trebuchtet',8,'bold'))
ipL=Label(fen,text='IP destinataire',bg="black",fg="blue",font=('trebuchtet',8,'bold'))
portE=Entry(fen,bg="yellow",fg="black",font=('trebuchtet',8,'bold'))
portL=Label(fen,text='Port :',bg="black",fg="blue",font=('trebuchtet',8,'bold'))
msgE=Entry(fen,bg="yellow",fg="black",width=50,font=('trebuchtet',8,'bold'))
msgL=Label(fen,text='Message:',bg="black",fg="blue",font=('trebuchtet',8,'bold'))
nameE=Entry(fen,bg="yellow",fg="black",font=('trebuchtet',8,'bold'))
nameE.grid(row=6,column=1)
nameL=Label(fen, text="votre nom :",bg="black",fg="blue",font=('trebuchtet',8,'bold'))
nameL.grid(row=6,column=0)
bous=Button(fen,text="valider",fg='red',bg='black',command=valide,font=('trebuchtet',8,'bold'))
boum=Button(fen,text="envoyer",fg='red',bg='black',state=DISABLED,command=envoyeb)
boum.grid(row=4,column=0)
ist=Label(fen, text=message,bg="black",fg="blue",font=('trebuchtet',8,'bold'))
nameL=Label(fen, text="votre nom :",bg="black",fg="blue",font=('trebuchtet',8,'bold'))
ist.grid(row=3,column=1)
servariable=IntVar() ####la ligne qui suit est coupé
c4=Checkbutton(fen,variable=servariable,text='etre serveur
:',font=('trebuchtet',8,'bold'),activeforeground="white",fg='blue',bg='black',command=servchoix)
c4.grid(row=4,column=2)
ipE.grid(row=0,column=1)
ipL.grid(row=0,column=0)
msgE.grid(row=2,column=1)
msgL.grid(row=2,column=0)
portE.grid(row=1,column=1)
portL.grid(row=1,column=0)
bous.grid(row=4,column=1)
fen.bind('<Return>',envoye)
#lancer
fen.mainloop()
##############################################
si vous voyez quel parametre changer ...
en plus une autre question, je voudrais savoir comment un serveur
puisse envoyer des message à un ou plusieur destinataire (j'ai
essailler avec sendto et send mais rien)
merci à plus