Reseau local, serveur/client [Résolu]

Signaler
Messages postés
38
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
12 juin 2006
-
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
-
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

Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
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
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
Il faut utiliser des threads
Messages postés
38
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
12 juin 2006
2
mais comment je donne les ordres de repartitions ?

pour cela il faut plusieurs classes non?



(et pour les messages personnes ne sait?)

a+
Messages postés
38
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
12 juin 2006
2
merci avec les thread sa marche

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



a+
Messages postés
179
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
21 mai 2014
2
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.