读写请求
1下载
!:按大端序(大端(网络字节序)和小端(家用笔记本))
ps:大端:高位数据放在低位地址;小端相反。
*struct 类型表*
Format C Type Python type Standard size Notes
x pad byte no value
c char string of length 1 1
b signed char integer 1 (3)
B unsigned char integer 1 (3)
? _Bool bool 1 (1)
h short integer 2 (3)
H unsigned short integer 2 (3)
i int integer 4 (3)
I unsigned int integer 4 (3)
l long integer 4 (3)
L unsigned long integer 4 (3)
q long long integer 8 (2), (3)
Q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string 1
p char[] string
P void * integer (5), (3)
#只要是向网络上发送 多个字节表示1个数值的这样的数据,那么就需要pack
组包struct.pack("!H8sb5sb",1,"test.jpg",0,"octet",0)返回获取到的数据
ps:python2网络这块可以直接传参字符串,python3需要先编码
#只要是从网络收到了一个 多个字节表示一个值的这样的数据,那么就需要对这个数据进行unpack解析
解包struct.unpack("!HH",获取到的数据)返回一个元组
1下载
2上传 文件名(test.jpg,长度8) 0 octet 0
将上述请求发送至69端口,tftp服务器新开一个端口用于发送数据包
数据包
3数据包(2个字节) 块序号(包编号,2个字节) 数据(512个字节)
**传输大文件时块序号超过65535时重新从0开始,即if num==65536:num=0
5错误(2字节) 差错码(错误类型,2字节) 差错内容(string)
回应ACK
4确认包 块序号
ps:当数据包小于516(2+2+512)字节时,表示下载结束!
ps:如何让1、2、3、4或5占两个字节?
import struct
pack,unpack!:按大端序(大端(网络字节序)和小端(家用笔记本))
ps:大端:高位数据放在低位地址;小端相反。
*struct 类型表*
Format C Type Python type Standard size Notes
x pad byte no value
c char string of length 1 1
b signed char integer 1 (3)
B unsigned char integer 1 (3)
? _Bool bool 1 (1)
h short integer 2 (3)
H unsigned short integer 2 (3)
i int integer 4 (3)
I unsigned int integer 4 (3)
l long integer 4 (3)
L unsigned long integer 4 (3)
q long long integer 8 (2), (3)
Q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string 1
p char[] string
P void * integer (5), (3)
#只要是向网络上发送 多个字节表示1个数值的这样的数据,那么就需要pack
组包struct.pack("!H8sb5sb",1,"test.jpg",0,"octet",0)返回获取到的数据
ps:python2网络这块可以直接传参字符串,python3需要先编码
#只要是从网络收到了一个 多个字节表示一个值的这样的数据,那么就需要对这个数据进行unpack解析
解包struct.unpack("!HH",获取到的数据)返回一个元组