Python 3: сообщение сервера разбора (TCP) - PullRequest
0 голосов
/ 30 апреля 2020

Я написал клиент, используя модуль сокета, и теперь я пытаюсь декодировать сообщение, которое я получаю от внешнего TCP-сервера, с помощью следующего кода (я знаю, что пакет имеет заголовок длиной 8 байт с такими деталями, как размер в первом 2 байта. После Заголовка появляется сообщение об ошибке, которое я пытаюсь декодировать):

received = sock.recv(1024)
print ("Bytes Received: {}".format(received.decode()))

При этом я получаю следующее сообщение об ошибке: UnicodeDecodeError: 'utf-8' code c невозможно декодировать байт 0xd c в позиции 0: недопустимый байт продолжения

Когда я пытаюсь исключить заголовок с помощью:

print ("Bytes Received: {}".format(received[9:].decode()))

Я просто получаю пустой результат:

Bytes Received: 

1 Ответ

0 голосов
/ 30 апреля 2020

Может быть, вы пытаетесь декодировать байт '\ x00', например:

>>> print('Output: ' + b'\x00'.decode())
Output: 
>>> 

В любом случае, если это длинные 8 байтов (заголовок UDP формируется из 8 байтов, а не TCP), вы следует написать:

print ("Bytes Received: {}".format(received[8:].decode()))

Если вы хотите работать с TCP-пакетами, я предлагаю вам использовать манипулятор пакетов, такой как Scapy: https://scapy.readthedocs.io/en/latest/installation.html

...