我试图发送和接收Python(v3)中的二进制数据。我试图做的方式是在客户端,我手动创建一个字节的字符串,然后通过套接字发送到服务器。在服务器端,我收到数据并手动访问各个位来解析消息。Python发送/ recv二进制数据
这是客户端的外观:
remoteIP = "164.107.112.72"
remotePort = 34562
remoteStruct = remoteIP.split('.', 4)
remoteIPBytes = ((int)(remoteStruct[0])).to_bytes(1, byteorder='little') + ((int)(remoteStruct[1])).to_bytes(1, byteorder='little') + ((int)(remoteStruct[2])).to_bytes(1, byteorder='little') + ((int)(remoteStruct[3])).to_bytes(1, byteorder='little')
headerStruct = remoteIPBytes + remotePort.to_bytes(2, byteorder='little')
sequenceNum = 0
size = #filesize
data = headerStruct + sequenceNum.to_bytes(1, byteorder='little') + (1).to_bytes(1,byteorder='little') + size.to_bytes(4, byteorder='little')
#data is then sent to server
这是服务器如何处理数据:
serversock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP Datagram
host = '164.107.112.70'
serversock.bind((host, localPort))
seqNum = 0
#get size
size = 0
var = serversock.recvfrom(12)
seqNum = int.from_bytes((str(var))[6], byteorder='little')
在代码的最后一行,我得到一个错误,指出(STR( var))被视为unicode字符串而不是二进制字符串。但是,如果我不作为字符串进行投射,则会出现访问超出界限的错误。
有人可以向我解释在python中发送和接收二进制数据的正确方法是什么?我一直在使用struct.pack并解压前/发送数据后尝试过,但在拆箱时,我总是会出错,即使格式化字符串是相同