一、struct模块
python中struct 模块用于python数据结构与C结构之间的相互转换,其中C结构是用一种格式化字符串表示的,学习struct 模块的难点就在这个格式化字符串上,强烈建议最好了解下C语言结构体的相关知识点,如果比较熟悉C语言结构体及对齐,学习struct 模块轻而易举。
官方英文文档:struct — Interpret strings as packed binary data
引用来源:https://blog.csdn.net/guoyajie1990/article/details/81044929
二、自制报文格式
headers = {‘file_name’: filename, ‘file_path’: filepath, ‘file_size’: None}
类型 | 方法 | 描述 |
---|---|---|
报头 | head=struct.pack(‘i’, ‘序列化之后报文的长度’) | 长度4个,服务端接受时候可以根据这个设置接受长度,避免沾包 |
发送报头 | send(head) | 服务端可以根据4个字节获取报头 |
发送报文 | send(‘序列化之后的headers’) | 服务端根据报文内文件大小,设置接受长度,避免沾包 |
网络传输过程中处处有协议,协议就是一堆报头和报文,协议的解析过程不需要关心,协议本质上就是一种约定
FTP上传功能实例
1、服务端代码
代码均有注释,方便理解,如有不懂,评论或者私信,一起学习一起进步
import socket
import struct,pickle
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 获取tcp/ip套接字
tcpSock.bind(('127.0.0.1', 8898)) # 绑定 (主机,端口号)到套接字
tcpSock.listen(1) # 开始监听,设置半进程池为1
print('====服务端等待请求中====')
while True:
conn, addr = tcpSock.accept() # 4、被动(阻塞式)接受TCP客户的连接