[Python] socket et encore l'encodage

Fermé
Utilisateur anonyme - 13 août 2011 à 08:52
 Utilisateur anonyme - 13 août 2011 à 15:09
Bonjour, je programme un serveur de controle à distance en python (qui execute des commande dos et envoi le résultat au client)

Il y a un problème au niveau de l'envoi des donnees tout est décalé (voir image) :
http://img11.hostingpics.net/pics/244283serv.png

Au début je me suis dit que cela venais du client telnet de windows mais avec putty c'est pareil par contre dans la console de python tous est OK




1 réponse

Guitsi Messages postés 205 Date d'inscription vendredi 12 août 2011 Statut Membre Dernière intervention 21 février 2013 47
13 août 2011 à 09:00
Bonjour, pourquoi n'utilises-tu pas SSH ?
Sinon essaye lors de l'envoi de la réponse de mettre plutôt ça : monsocket.send(reponse).encode("utf-8")
L'encodage des caractères lors de communications réseau n'est jamais simple.
0
Utilisateur anonyme
13 août 2011 à 09:07
Car en python SSH je connais pas...

Pour le "encode" voila l'erreur :

conn.send(execute.encode("utf-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 52: ordinal not in range(128)
0
Guitsi Messages postés 205 Date d'inscription vendredi 12 août 2011 Statut Membre Dernière intervention 21 février 2013 47
13 août 2011 à 09:19
Quel est ton code exactement ?
0
Utilisateur anonyme
13 août 2011 à 09:21
while (conn.connect):
data = conn.recv(2048)
if not data: break

if data != "\r\n":
cmd = cmd + data

else:
print " >> " + cmd
execute = os.popen(cmd).read()
print execute
conn.send(execute.decode("utf-8"))
conn.send(" >> ")
cmd = ""
0
Utilisateur anonyme
13 août 2011 à 09:23
PS : j'ai aussi tenté decode
0
Guitsi Messages postés 205 Date d'inscription vendredi 12 août 2011 Statut Membre Dernière intervention 21 février 2013 47
13 août 2011 à 10:04
Essaie avec ça :
import socket, sys, os
HOST = "192.168.1.142"
PORT = 50000
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
msgacceuil = "Vous êtes connecté, envoyez vos commandes"
commcli = ""
try :
conn.bind((HOST,PORT))
except socket.error:
print("La liaison n'as pu être établie")
sys.exit()

while 1 :
print("Serveur prêt, en attente de clients...")
conn.listen(2)

connexion, addr = conn.accept()
print("Client %s connecté sur le port %s" % (addr[0], addr[1]))
connexion.send(msgacceuil.encode("Utf8"))
data = connexion.recv(2048).decode("Utf8")
while 1:
if data !="\r\n":
commcli += data
else :
print(">> %s" % commcli)
if commcli.upper() == "EXIT" or commcli == "":
break
execute = os.popen(commcli).read()
print(execute)
connexion.send(execute.encode("Utf8"))
commcli = ""
data = connexion.recv(2048).decode("Utf8")
connexion.send('FIN'.encode("Utf8"))
print("Fin de la connexion")
connexion.close()
Par contre il est interessant aussi d'utiliser python en client et non pas Putty ou telnet
0