begin process at 2010 09 04 11:07:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Python

 > 

Archives

 > 

Réseaux & Internet

 > 

reseau local, serveur/client


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

reseau local, serveur/client

jeudi 4 mai 2006 à 16:28:27 | reseau local, serveur/client

xilure

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
jeudi 4 mai 2006 à 17:05:26 | Re : reseau local, serveur/client

taz_iup

Il faut utiliser des threads
jeudi 4 mai 2006 à 19:28:20 | Re : reseau local, serveur/client

xilure

mais comment je donne les ordres de repartitions ?
pour cela il faut plusieurs classes non?

(et pour les messages personnes ne sait?)
a+
jeudi 4 mai 2006 à 20:47:49 | Re : reseau local, serveur/client

taz_iup

Réponse acceptée !
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
samedi 13 mai 2006 à 07:39:34 | Re : reseau local, serveur/client

xilure

merci avec les thread sa marche
c'est un peu casse pied pour les variables globals mais bon

a+
dimanche 14 mai 2006 à 13:29:32 | Re : reseau local, serveur/client

taz_iup

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.


Cette discussion est classée dans : message, text, serveur, socket, fen


Répondre à ce message

Sujets en rapport avec ce message

Socket et Threading [ par dabcorp ] Bonjour , J'ai fait un client/serveur socket , mais je me comprend pas les threads ... Je suis obligé de faire une boucle pour relance le programme à Socket+timeout [ par power211 ] Re Bonjour tout lemonde,bon voila j aurai une ptite question sur les sockets plus les timeout.Donc je vais directement aller au but avec un exemple co opération simple ...et pourtant compliquée...et pourtant simple...et p.... [ par dojh ] Bonjour à tousEn pleine initiation Python, mais aussi en prise de tête, mais c'est bien, ça fait travailler le cerveau...L'idée, c'est qu'avec l'impor Serveur/Client (Je comprend pas 2lignes) [ par Guillamue06 ] Bonjour, voila j'ai vue cette source serveur et j'éssai de la comprendre et 2 ligne m'échape : import socket HOST = '127.0.0.1' # The remote host Socket Python en SSL et Jabber [ par superzero93 ] Bonsoir à tousJ'ai installé un serveur XMPP Jabber sur une machine virtuelle Debian Lenny 32 bits (noyau 2.6.29 et sans interface graphique), et un cl Sockets : client/serveur en local -> connection reset by peer [ par xkindool ] Bonjour tout le monde. J'ai un petit problème, je suis débutant python et je cherche à faire un client/serveur tout simple. Alors je m'inspire de ces Python 2.6 avec Tkinter 8.6 [ par zarash ] Bonjour, Voici mon probleme : Je souhaite utiliser une option du widget text de Tkinter qui n'existe que dans la version 8.6.Il s'agit de la rotation [php][sql]recherche multiple dans une base de donnée sql [ par jeff83fr ] Bonjour, j'ai un problème de récupération a ma base de donné, je m explique je souhaiterai faire un annuaire je souhaiterai donc faire une page un p programme avec Tkinter [ par bouffffi ] Bonjour à tous, Je suis débutant et j'ai fait un programme pour calculer la probabilité d'un nombre, puis j'ai voulu le faire avec une interface grap split [ par bulle0789 ] bonjour, je débute en python, donc je n'ai pour l'instant encore que des bases. Je sais que pour supprimer un signe de ponctuation d'un texte il faut


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales