[Python] socket et encore l'encodage

Utilisateur anonyme -  
 Utilisateur anonyme -
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



--
http://www.mypelemele.fr

1 réponse

  1. Guitsi Messages postés 285 Statut Membre 47
     
    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
    1. Utilisateur anonyme
       
      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
    2. Guitsi Messages postés 285 Statut Membre 47
       
      Quel est ton code exactement ?
      0
    3. Utilisateur anonyme
       
      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
    4. Utilisateur anonyme
       
      PS : j'ai aussi tenté decode
      0
    5. Guitsi Messages postés 285 Statut Membre 47
       
      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