A voir également:
- [python]recuperer une valeur de __init__
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
- Citizen code python - Accueil - Outils
3 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
3 avril 2008 à 14:45
3 avril 2008 à 14:45
comment récuperer la liste l????
tout simplement.
print serveur.l
tout simplement.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
3 avril 2008 à 15:31
3 avril 2008 à 15:31
C'est normal: Un objet qui dérive de BaseRequestHandler doit prendre en entrée les paramètres suivants: (self, request, client_address, server)
Modifie la méthode __init__ de ta classe GestionnaireEcho.
Modifie la méthode __init__ de ta classe GestionnaireEcho.
tsic
Messages postés
20
Date d'inscription
jeudi 7 février 2008
Statut
Membre
Dernière intervention
20 juin 2008
3 avril 2008 à 15:50
3 avril 2008 à 15:50
Désolée,
Je vous jure qu j'ai essayé tout MAIS çA PAS MARCHE!!!!
Peut etre parce que je suis débutante en python. voilà le code du serveur modifié:
code du client que j'utilise:
Le message d'erreur est eliminer mais la boucle infinie reste.
bien que ça a marché en shell python
je crois que l'erreur est dans donneesReçues
Please please essayez d'executer le code et voyer vous meme
Je n'est plus d'idees à faire pour le corriger.
SVP
Merci
Je vous jure qu j'ai essayé tout MAIS çA PAS MARCHE!!!!
Peut etre parce que je suis débutante en python. voilà le code du serveur modifié:
from socket import * import socket, sys, threading import SocketServer import time import locale class GestionnaireEcho(SocketServer.BaseRequestHandler): def __init__ (self, request, client_address, server): self.l = [] for ligne in open('benj.txt'): for commande in ligne.split('#'): self.l.append(commande.strip()) print self.l def handle(self, request, client_address, server): print "la liste est:" print self.l locale.setlocale(locale.LC_ALL,'') c= time.strftime('%A %c') print "Connexion de ", self.client_address,c while True: donneesRecues = self.request.recv(8192) t=time.strftime("%H:%M:%S") print "\n C ",t, "> ", donneesRecues dr=str(donneesRecues) try: ind=self.l.index(dr) print ind msg= str(self.l[ind+1]) except: msg="commande erronee" self.request.send(msg) print "Deconnexion de ", self.client_address mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho) except socket.error: print "La liaison du socket a l'adresse choisie a echoue." sys.exit() print "En attente..!!!!" serveur.serve_forever()
code du client que j'utilise:
# Definition d"un client reseau gerant en parallele l'emission # et la reception des messages (utilisation de 2 THREADS). host = '127.0.0.1' port = 84 import socket, sys, threading class ThreadReception(threading.Thread): """objet thread gerant la reception des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # ref. du socket de connexion def run(self): while 1: message_recu = self.connexion.recv(1024) print "Ser>" + message_recu # Le thread <reception> se termine ici. # On force la fermeture du thread <emission> : print "Client arrete. Connexion interrompue." self.connexion.close() class ThreadEmission(threading.Thread): """objet thread gerant l'emission des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # ref. du socket de connexion def run(self): message_final="" while 1: message_final="" message_emis = raw_input() message_final = message_final + " \n "+ message_emis self.connexion.send(message_final) # Programme principal - etablissement de la connexion : connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: connexion.connect((host, port)) except socket.error: print "La connexion a echoue." sys.exit() print "Connexion etablie avec le serveur." # Dialogue avec le serveur : on lance deux threads pour gerer # independamment l'emission et la reception des messages : th_E = ThreadEmission(connexion) th_R = ThreadReception(connexion) th_E.start() th_R.start()
Le message d'erreur est eliminer mais la boucle infinie reste.
bien que ça a marché en shell python
je crois que l'erreur est dans donneesReçues
Please please essayez d'executer le code et voyer vous meme
Je n'est plus d'idees à faire pour le corriger.
SVP
Merci
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
3 avril 2008 à 16:26
3 avril 2008 à 16:26
Désolé je n'ai pas le temps de regarder.
Reprend les exemples de BaseRequestHandler qu'on trouve sur internet, et comme client utilise Putty en mode RAW.
Reprend les exemples de BaseRequestHandler qu'on trouve sur internet, et comme client utilise Putty en mode RAW.
ok
J'ai testé tout les cmd ça a marché sauf:
ind=self.l.index(dr)
le probleme est dans cette ligne.
je ne comprend pas pourquoi? Je l'ai changé par une chaine existantedans le fichier.tst et ça marché et j'ai vérifier le type du contenu de la liste c'est str et celle du dr sont str.
Liste.index(x)normalement ça marche. Ou est ce qu'i ya des cas où elle ne marche pas sinon est ce qu'il y a une autre methode simple pour faire la recherche de données dans une liste.
Désolée de vous déranger sebsauvage...
J'ai testé tout les cmd ça a marché sauf:
ind=self.l.index(dr)
le probleme est dans cette ligne.
je ne comprend pas pourquoi? Je l'ai changé par une chaine existantedans le fichier.tst et ça marché et j'ai vérifier le type du contenu de la liste c'est str et celle du dr sont str.
Liste.index(x)normalement ça marche. Ou est ce qu'i ya des cas où elle ne marche pas sinon est ce qu'il y a une autre methode simple pour faire la recherche de données dans une liste.
Désolée de vous déranger sebsauvage...
Le probleme persiste encore dans la ligne
ind=self.l.index(donneesRecues)
Comme si cette ligne fait une exception.
Alors quand je la remplace par une chaine qui existe dans le fichier: ind=self.l.index("jiji") ça marche normalement comme prévu
NB:donneesRecues ce sont les donnees envoyées par le client et dont le serveur doit tester pour donner une reponse appropriée située dans la liste dans la case qui suit la case de la cmd.
J'ai changé le code de recherche comme suit mais rien n'a changé
ind=self.l.index(donneesRecues)
Comme si cette ligne fait une exception.
Alors quand je la remplace par une chaine qui existe dans le fichier: ind=self.l.index("jiji") ça marche normalement comme prévu
NB:donneesRecues ce sont les donnees envoyées par le client et dont le serveur doit tester pour donner une reponse appropriée située dans la liste dans la case qui suit la case de la cmd.
J'ai changé le code de recherche comme suit mais rien n'a changé
ch="" dr="" for ch in self.l: if ch == donneesRecues : dr=self.l[self.l.index(ch)+1] print "dr est = %s"%(dr) if len(dr)==0: msg="commande erronee" else: msg=dr self.request.send(msg)
3 avril 2008 à 14:58
2) le probleme c'est dans le passage:
quelque soit la cmd que j'ecrit il me renvoie commande erronée donc il n'accede jamais à try----> ce qui est l'important dans mon pfe
Merci
3 avril 2008 à 15:04
Non ça veut dire que l'une des trois lignes comprises entre le try et le except plante.
Retire ton try/execpt pour voir l'erreur.
Je suis prêt à parier que c'est une erreur d'indexe dans ton tableau self.l
3 avril 2008 à 15:21
2)j'ai changé le code et tjs la meme chose le client entre dans une boucle infini et le serveur me reclame l'erreur suivante que je n'est pas compris:
3) Si vous avez une autre solution à mon sujet j'accepterai parce que j'etouffe. j'ai passé 3 jours sur ceci.
Merci
3 avril 2008 à 15:22