关于TFTP的RFC,RRQ / WRQ包必须是这样的:
2 bytes string 1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------
模式可以是“netascii”,“octet”(相当于二进制)或“mail”。东西是netascii是8个字母,八位字节有5个,邮件有4个。
我正在我的客户端创建我的数据包:
paq = struct.pack('!H'+str(len(fileName))+'sB'+str(len(mode))+'sB', 02, fileName, 0,mode, 0)
然后我将数据包发送到服务器,以便服务器知道会发生什么(如果是RRQ或WRQ)。
问题是如果我不知道服务器端的字符串长度,我不知道如何解包数据包...我的意思是,唯一知道文件长度和模式长度的人是客户端,因为它是制作数据包的人。
我需要帮助在服务器端解压缩此数据包。 我应该在发送RRQ / WRQ数据包之前将长度发送到服务器,以便我知道解包时要使用的格式,还是有其他方法?
谢谢!
答案 0 :(得分:0)
如果收到的数据包在字节数组p
中,您可以使用0
搜索find()
分隔符。
opcode = p[0:2].decode('ASCII')
nameEnd = p.find(b'\0', start=2)
filename = p[2:nameEnd].decode('ASCII')
modeEnd = p.find(b'\0', start=nameEnd+1)
mode = p[nameEnd+1:modeEnd].decode('ASCII')