[Python] socket et encore l'encodage
Fermé
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
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
A voir également:
- [Python] socket et encore l'encodage
- Citizen code python avis - Accueil - Outils
- Error 2002 (hy000): can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) ✓ - Forum Linux / Unix
- Python generator - Télécharger - Sécurité
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
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
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.
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.
13 août 2011 à 09:07
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)
13 août 2011 à 09:19
13 août 2011 à 09:21
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 = ""
13 août 2011 à 09:23
13 août 2011 à 10:04
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