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:
    conn, addr = tcpSock.accept()  # 4、被动(阻塞式)接受TCP客户的连接
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的正则表达式中,struct模块提供了一些常用的函数,用于处理二进制数据的解析和打包。这些函数可以与正则表达式一起使用,以便于对匹配的二进制数据进行进一步处理。 以下是struct模块中常用的函数: 1. `struct.pack(format, v1, v2, ...)`: 将给定的值按照指定的格式(format)打包成一个二进制字符串。例如: ```python import struct binary_data = struct.pack('i f d', 42, 3.14, 2.71828) print(binary_data) ``` 这个示例将整数42、浮点数3.14和双精度浮点数2.71828打包成一个二进制字符串。 2. `struct.unpack(format, buffer)`: 从给定的二进制字符串(buffer)中按照指定的格式(format)解析出值。例如: ```python import struct binary_data = b'\x2a\x00\x00\x00\x0f\x49\x0f\xdb\x5e\x40\x09\x21\xfb\x53\xc0' values = struct.unpack('i f d', binary_data) print(values) ``` 这个示例将二进制字符串解析为一个整数、一个浮点数和一个双精度浮点数。 3. `struct.calcsize(format)`: 计算给定格式(format)的二进制字符串所占用的字节数。例如: ```python import struct size = struct.calcsize('i f d') print(size) ``` 这个示例将输出整数、浮点数和双精度浮点数所占用的总字节数。 通过结合正则表达式和struct模块的函数,可以更灵活地处理和解析二进制数据。在正则表达式匹配到特定的二进制数据后,可以使用struct模块的函数对其进行解包、打包或计算大小等操作。这样可以方便地对二进制数据进行进一步的处理和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值