Клиент сокета Python3 для отправки и получения шестнадцатеричной строки

Я застрял в этом коде Python3 клиента сокета:

import socket
import codecs

def Main():
        host = '127.0.0.2'
        port = 502

        mySocket = socket.socket()
        mySocket.connect((host,port))

        message = codecs.encode('\x00\x00\x00\x00\x00\x06\x01\x04\x00\x01\x00\x02')

        mySocket.send(message)
        data = codecs.decode(mySocket.recv(1024))

        print ('Received from server: ' + data)


        mySocket.close()

if __name__ == '__main__':
    Main()

Это дает ошибку

Файл "C:\Python34\lib\encodings\utf_8.py", строка 16, при декодировании возвращает codecs.utf_8_decode(ввод, ошибки, True) UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xb3 в позиции 11: неверный стартовый байт

Я пытаюсь подключиться к серверу Ananas — Modbus/TCP.

В чем ошибка?

Спасибо!


person DDDD    schedule 02.04.2017    source источник


Ответы (1)


Это потому, что он пытается преобразовать data в строку utf-8 (и некоторые из содержащихся байтов невозможно представить в utf-8).

Если вы хотите увидеть шестнадцатеричное значение массива байтов, вы можете:

Питон3.5+

data = mySocket.recv(1024)
data.hex()

Другое

>>> import binascii
>>> data = mySocket.recv(1024)
>>> data = binascii.hexlify(data).decode()
person Pirheas    schedule 02.04.2017