Python3套接字客户端发送和接收十六进制字符串

时间:2017-04-02 00:44:19

标签: python python-3.x sockets hex modbus-tcp

我被困在这个套接字客户端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行,解码       return codecs.utf_8_decode(input,errors,True)   UnicodeDecodeError:' utf-8'编解码器不能解码位置11中的字节0xb3:无效的起始字节

我正在尝试连接到Ananas - Modbus / TCP -server

错误是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是因为它试图将data转换为utf-8字符串(并且包含的​​某些字节无法在utf-8中表示)。

如果要查看字节数组的十六进制值,可以:

<强> Python3.5 +

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

<强> Othewrise

>>> import binascii
>>> data = mySocket.recv(1024)
>>> data = binascii.hexlify(data).decode()