Python TCP 接收
Python TCP Recieving
随着我进一步研究我的程序,我遇到了这个我似乎无法解决的问题,所以就这样吧。当我将代码发送到一个盒子时,它会发回一个命令,然后我对其进行解码,我就可以做到这一点。但我 运行 遇到的问题是,当我用十六进制代码返回响应时,它似乎将其放入括号中,并且每个十六进制代码都被放在引号中,这搞乱了我的程序。这是我的代码。
TX = b"\x7E\x00\x0C\x01\x00\xA5\xBD\x00\x7E\x01\x00\x40\x2D\x00\x3F\x71"
T_X = 'TX = '
R_X = 'RX = '
BUFFER = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
b = 1
while b == 1:
s.send(TX)
time.sleep(1)
__ByteStr2 = repr(s.recv(BUFFER))
xString = __ByteStr2[2:-1]
__bytStr = ByteToHex(xString)
newString = __bytStr[48:-6]
print (type(__ByteStr2))
print (__bytStr)
print (newString)
主要问题是输出的代码是这样的。
['7E', '00', '16', '81', 'A5', 'BD', '35', '02', '7E', '00', '01', 'C7', '2D', '0A', '00', '11', '40', '12', '00', '00', '00', '00', '00', '00', 'F7', '0E']
代码实际上应该像这样输出所有内容。
7E 00 16 81 A5 BD 35 02 7E 00 01 C7 2D 0A 00 11 40 12 00 00 00 00 00 00 F7 0E
老实说,我不知道为什么要那样做..任何帮助都会很棒:)
您将字符串与字符串表示混淆了。删除 recv
周围的 repr
。
如果要打印出包含 "unprintable" 个字符的字符串,则只需要 repr
。看这里的区别:
>>> print "hello\nworld"
hello
world
>>> print repr("hello\nworld")
'hello\nworld'
所以所有的索引魔法、字节到十六进制的转换等都是不必要的。
此外,您的网络设置有误。 recv
不能保证收到您期望的所有数据,因此您需要遵循协议。你不说 "box" 是什么 - 如果这是你自己做的,我建议改用 zeromq 或 nanomsg。如果它是第 3 方的东西,文档应该包含提示。
随着我进一步研究我的程序,我遇到了这个我似乎无法解决的问题,所以就这样吧。当我将代码发送到一个盒子时,它会发回一个命令,然后我对其进行解码,我就可以做到这一点。但我 运行 遇到的问题是,当我用十六进制代码返回响应时,它似乎将其放入括号中,并且每个十六进制代码都被放在引号中,这搞乱了我的程序。这是我的代码。
TX = b"\x7E\x00\x0C\x01\x00\xA5\xBD\x00\x7E\x01\x00\x40\x2D\x00\x3F\x71"
T_X = 'TX = '
R_X = 'RX = '
BUFFER = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
b = 1
while b == 1:
s.send(TX)
time.sleep(1)
__ByteStr2 = repr(s.recv(BUFFER))
xString = __ByteStr2[2:-1]
__bytStr = ByteToHex(xString)
newString = __bytStr[48:-6]
print (type(__ByteStr2))
print (__bytStr)
print (newString)
主要问题是输出的代码是这样的。
['7E', '00', '16', '81', 'A5', 'BD', '35', '02', '7E', '00', '01', 'C7', '2D', '0A', '00', '11', '40', '12', '00', '00', '00', '00', '00', '00', 'F7', '0E']
代码实际上应该像这样输出所有内容。
7E 00 16 81 A5 BD 35 02 7E 00 01 C7 2D 0A 00 11 40 12 00 00 00 00 00 00 F7 0E
老实说,我不知道为什么要那样做..任何帮助都会很棒:)
您将字符串与字符串表示混淆了。删除 recv
周围的 repr
。
如果要打印出包含 "unprintable" 个字符的字符串,则只需要 repr
。看这里的区别:
>>> print "hello\nworld"
hello
world
>>> print repr("hello\nworld")
'hello\nworld'
所以所有的索引魔法、字节到十六进制的转换等都是不必要的。
此外,您的网络设置有误。 recv
不能保证收到您期望的所有数据,因此您需要遵循协议。你不说 "box" 是什么 - 如果这是你自己做的,我建议改用 zeromq 或 nanomsg。如果它是第 3 方的东西,文档应该包含提示。