#python #sockets #tcp
Вопрос:
Я использовал python для подключения rfid-устройства через tcp-сокет.
вот базовый код
HOST = '192.168.1.159'
PORT = 4001
from socket import *
def main():
tcp_client_socket = socket(AF_INET,SOCK_STREAM)
tcp_client_socket.connect((HOST,PORT))
while True:
recv_data = tcp_client_socket.recv(10240)
if recv_data:
print(recv_data)
else:
break
tcp_client_socket.close()
if __name__ == '__main__':
main()
тогда я получу значение вот так
b'xa0x13x01x89x1c4x000x083xb2xddxd9x01@x00x00x00xa4pK'
но средство тестирования сокета tcp получает значение, подобное этому
A0 13 01 89 1C 34 00 30 08 33 B2 DD D9 01 40 00 00 00 A4 70 4B
проверьте выделенную часть.
Я тред
print(recv_data.decode())
затем получите
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 0: invalid start byte
Я не знаю, как решить эту проблему. может кто-нибудь помочь? пожалуйста.
Комментарии:
1. По умолчанию в байтовой строке отображается символ ASCII, если он находится в диапазоне ASCII для печати. так
b'x34' == b'4'
иb'x40' == b'@'
есть . Это просто отображаемое представление. Но я вижу, что вы нашли.hex()
шестнадцатеричное представление. Полученные байты в любом случае одинаковы.
Ответ №1:
Я решил свой вопрос
print(recv_data.hex())
затем получите
a00a018900000500000001c6
и отправлять данные
packet = bytearray()
packet.append(0xA0)
packet.append(0x04)
packet.append(0x01)
packet.append(0x74)
packet.append(0x00)
packet.append(0xE7)
packet.append(0xA0)
packet.append(0x04)
packet.append(0x01)
packet.append(0x89)
packet.append(0x01)
packet.append(0xD1)
tcp_client_socket.send(packet)
Комментарии:
1. Вместо добавления вручную вы можете сделать
packet = bytes([0xa0,0x04, ... ])
илиb'xa0x04x01...'
.