python网络基础:STRUCT模块定制报文,实现FTP上传功能

一、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:
    con

版权声明:本文为weixin_42444693原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。