Я пытаюсь создать удаленную оболочку, используя сокеты. Некоторые команды работают как netstat
или dir
. Но когда я пытаюсь использовать ping
, появляется это сообщение об ошибке:
- UnicodeDecodeError: код 'utf-8' c не может декодировать байт 0x81 в позиции 18: недопустимый начальный байт
Эта проблема возникает только на стороне сервера, если я попытаюсь закодировать сообщение в utf-8. С обычной байтовой строкой работает нормально. Я также пытался сначала получить, а затем закодировать строку.
На стороне сервера:
while True:
cmd = input(">>>")
if len(str.encode(cmd)) > 0:
connection.send(str.encode(cmd))
client_response = str(connection.recv(1024), encoding = "utf-8")
print (client_response, end = "")
На стороне клиента:
while True:
data = sock.recv(1024).decode("utf-8")
proc = subprocess.Popen(shlex.split(data),
shell = True,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
output = proc.stdout.read()+proc.stderr.read()
sock.send(output)
Может быть, кто-нибудь может дать мне совет .