Reseau local, serveur/client

Résolu
xilure Messages postés 38 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 12 juin 2006 - 4 mai 2006 à 16:28
taz_iup Messages postés 179 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 21 mai 2014 - 14 mai 2006 à 13:29
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('',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

5 réponses

taz_iup Messages postés 179 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 21 mai 2014 3
4 mai 2006 à 20:47
une thread permet d'executer une fonction par exemple sans attendre son retour.
et d'expérience met plutot un booleen a la place while true
comme ca tu pourras quitter en faisant basculer ton booleen

pourl les threads je te laisse te documenter
3
taz_iup Messages postés 179 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 21 mai 2014 3
4 mai 2006 à 17:05
Il faut utiliser des threads
0
xilure Messages postés 38 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 12 juin 2006 2
4 mai 2006 à 19:28
mais comment je donne les ordres de repartitions ?

pour cela il faut plusieurs classes non?



(et pour les messages personnes ne sait?)

a+
0
xilure Messages postés 38 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 12 juin 2006 2
13 mai 2006 à 07:39
merci avec les thread sa marche

c'est un peu casse pied pour les variables globals mais bon



a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
taz_iup Messages postés 179 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 21 mai 2014 3
14 mai 2006 à 13:29
Le module threading te permet de faire des objets qui hérite de threading.Thread.
C'est une classe qui se sert du module thread. Elle possede une methode run (que tu dois surchargée) qui est le traitement lancé dans un thread.
L'avantage c'est que tu défini un objet donc tu peux lui mettre des propriétés qui sont accessible depuis le thread mais aussi depuis l'extérieur.
Si tu veux je te passerai un exemple.
0
Rejoignez-nous