【发布时间】:2014-03-24 22:05:47
【问题描述】:
我试图在 python(v3) 中发送和接收二进制数据。我尝试这样做的方式是在客户端,我手动创建一串字节,然后通过套接字将其发送到服务器。在服务器端,我接收数据并手动访问各个位来解析消息。
这是客户端的外观:
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 和解包,但在解包过程中我总是会出错,即使格式字符串相同
【问题讨论】:
标签: python sockets networking