【Python基础】文件传输协议

news2024/11/24 4:57:50

0

🌈欢迎来到Python专栏
🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生
🌏IP坐标:湖北武汉
🍉 目前技术栈:C/C++、Linux系统编程、计算机网络、数据结构、Mysql、Python(目前在学)
🍇 博客介绍:通过分享学习过程,加深知识点的掌握,也希望通过平台能认识更多同僚,如果觉得文章有帮助,请您动动发财手点点赞,本人水平有限,有不足之处欢迎大家扶正~
🍓 最后送大家一句话共勉:知不足而奋进,望远山而前行。愿大家都能早日进大厂实现财富自由~
————————————————

文件传输

  • 1.服务器端
  • 2.客户端

1.服务器端

#!/usr/bin/python
# author X_Dragon
# E-mail:3270895551@qq.com
# @Time : 2023/11/14 11:21

from socket import *
import struct

def tcp_init():
    s = socket(AF_INET, SOCK_STREAM)
    addr = ('', 2000)
    s.bind(addr)
    s.listen(128)
    return s

def send_file():
    file_name='第5章_UDP与TCP通信.doc'
    s=tcp_init()
    new_client,client_addr=s.accept()
    # 先发文件名
    file_name_bytes=file_name.encode('utf8')
    train_head_bytes=struct.pack('I',len(file_name_bytes))
    new_client.send(train_head_bytes+file_name_bytes)
    # 再发文件内容
    f=open(file_name,'rb')
    file_content=f.read()
    train_head_bytes = struct.pack('I', len(file_content))
    new_client.send(train_head_bytes+file_content)
    f.close()
    new_client.close()
    s.close()



if __name__ == '__main__':
    send_file()

tcp_init 函数用于初始化TCP服务器,绑定地址和端口,并开始监听。
send_file 函数首先等待客户端的连接,然后发送文件名和文件内容。
文件名首先转为字节并计算其长度,然后使用 struct.pack 将长度打包为4字节的二进制数据,发送给客户端。
接着将文件名字节和文件内容打包为二进制数据,同样使用 struct.pack 计算长度并发送给客户端。
要正确运行这个代码,需要有一个相应的客户端代码来接收和处理发送的文件。客户端代码应该能够解析服务器发送的二进制数据,还原文件名和文件内容。

2.客户端

#!/usr/bin/python
# author X_Dragon
# E-mail:3270895551@qq.com
# @Time : 2023/11/14 11:22
from socket import *
import select
import sys
import time
import struct
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 本地IP地址和端口
address = ('10.12.145.90', 2000)

# 连接服务器
tcp_client_socket.connect(address)

#每次要先读4个字节的火车头
train_head_bytes=tcp_client_socket.recv(4)
train_content_len=struct.unpack('I',train_head_bytes)
file_name=tcp_client_socket.recv(train_content_len[0])  #接到文件名
f=open(file_name.decode('utf8'),'wb')

#接文件内容的长度
train_head_bytes=tcp_client_socket.recv(4)
train_content_len=struct.unpack('I',train_head_bytes)
file_content=tcp_client_socket.recv(train_content_len[0]) #接文件内容
f.write(file_content)
f.close()
tcp_client_socket.close()

首先,客户端连接到服务器的指定地址和端口。
然后,通过 tcp_client_socket.recv(4) 接收文件名的长度。
使用 struct.unpack(‘I’, train_head_bytes) 解包得到文件名的长度,并通过 tcp_client_socket.recv(train_content_len[0]) 接收文件名的字节数据。
文件名通过 file_name.decode(‘utf8’) 转换为字符串。
再次接收4个字节的火车头,解包得到文件内容的长度,再通过 tcp_client_socket.recv(train_content_len[0]) 接收文件内容的字节数据。
最后,将文件内容写入本地文件。

  • 运行:
    0
    运行结束:

00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vim批量多行缩进调整

网上其他教程&#xff1a; ctrl v 或者 v进行visual模式按方向键<&#xff0c;>调整光标位置选中缩进的行Shift > &#xff08;或者 Shift < &#xff09;进行左右缩进。 我只想说&#xff0c;乱七八糟&#xff0c;根本不管用 本文教程&#xff1a; 增加缩进…

mac项目流程管理 OmniPlan Pro 4 中文最新 for mac

在OmniPlan Pro 4中&#xff0c;用户可以创建详细的项目计划&#xff0c;包括任务、资源、时间表、预算等设置。同时&#xff0c;软件支持任务管理&#xff0c;让用户能够创建、编辑和删除任务&#xff0c;设置任务的优先级、依赖关系、持续时间、起始日期等。对于资源管理&…

搬家快递服务预约小程序的作用是什么

无论家庭还是企业办公&#xff0c;不少人都有搬家快递服务需求&#xff0c;尤其是近些年类似服务市场需求规模增长迅速。而在实际经营中&#xff0c;行业商家从业者也面临一些经营难题&#xff1a; 搬家公司的服务一般主要针对同省用户&#xff0c;同城需求较高&#xff0c;然…

Python学习:同步异步阻塞与非阻塞

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、状态介绍 在了解其他概念之前&#xff0c;我们首先要了解进程的几个状态。 在程序运行的过程中&#xff0c;由于被操作系统的调度算法控制&#xff0c;程序会进入几个状态&#xff1a;就绪&#xff0c;运行和阻塞。 就绪…

Python logging模块打印日志

logging打印日志&#xff0c;文件名为log_config.py import logging import sysdef setup_logger(log_file, error_log_file):# 创建一个日志记录器logger logging.getLogger(__name__)logger.setLevel(logging.DEBUG) # 设置全局日志级别为 DEBUG# 创建一个文件处理器&…

赛宁网安获评“铸网-2023”江西省实网应急演练优秀支撑单位

近日&#xff0c;南京赛宁信息技术有限公司&#xff08;赛宁网安&#xff09;获得了江西省工业和信息化厅颁发的“优秀支撑单位”荣誉。 该荣誉表彰是对赛宁网安在“铸网-2023”江西省工业领域网络安全实网应急演练中提供全程技术支撑能力的认可。 本次实网应急演练聚焦工业企…

VISA机制

需要用到VISA的3种机制&#xff1a;属性机制、锁定机制和事件机制。以写资源为例&#xff0c;3种机制的作用如图 &#xff08;1&#xff09;属性机制 属性机制用来控制资源的各种属性&#xff0c;这些属性分为两种&#xff1a;只读属性和可读可写属性。 &#xff08;2&#xf…

轻量封装WebGPU渲染系统示例<30>- 绘制线段(源码)

原理说明&#xff1a; WebGPU提供了绘制基本线条非机制&#xff0c;只要render pipeline primitive对应的 topology属性指定为line-list或者line-strip即可绘制对应的线条。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxg…

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频)

【移远QuecPython】EC800M物联网开发板的音乐播放&#xff08;PWM蜂鸣器播放生日快乐歌&#xff0c;Sound模块播放音频&#xff09; 效果&#xff1a; 【移远QuecPython】EC800M开发板外置功放重金属和PWM音调&#xff08;BUG调试记录&#xff09; 文章目录 PWM蜂鸣器播放播放…

如何定制开发软件 App?|小程序网站搭建

如何定制开发软件 App&#xff1f;|小程序网站搭建 随着移动互联网的快速发展&#xff0c;定制开发软件 App 成为了许多企业和个人的需求。无论是为了满足特定业务需求&#xff0c;还是为了提升用户体验&#xff0c;定制开发软件 App 都可以帮助我们实现目标。下面&#xff0c;…

如何将 .SQL 文件导入到 IDEA自带的MySQL中

首先连接数据库新建数据库右键选择该数据库选择如下&#xff1a;找到对应的sql文件即可

质量管理工作难做,为什么还有那么多人还继续做?

理解质量管理的挑战 在当今商业环境中&#xff0c;质量管理工作是一项充满挑战的使命。然而&#xff0c;尽管面对种种困难&#xff0c;却有着越来越多的人愿意踏上这条坎坷之路。为何质量管理工作如此艰难&#xff0c;却依旧吸引无数人投身其中呢&#xff1f; 内外动因交融 内…

高通发布骁龙X Elite Oryon CPU /GitHub出现一款开源项目,让用户“拥有”更大的GPU内存|魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 高通发布骁龙X Elite Oryon CPU&#xff0c;性能超越苹果和英特尔&#xff0…

如何使用Echarts

以umi为例 首先是下载两个插件&#xff08;echarts和echarts-for-react&#xff09; npm npm install --save echarts-for-react npm install echarts yarn yarn add echarts-for-react yarn add echarts 接下来是在tsx或jsx中引入使用 import ReactEcharts from "echa…

运输服务预约小程序的效果如何

市场中运输服务的需求非常高&#xff0c;比如常见的汽车出境、进出口代理、仓储服务、集装箱运输、展会运输等&#xff0c;由于相关从业者多&#xff0c;所以在运输服务总是在市场中有着一席之地。 以前的运输企业拓客转化方式大多是同地区的单子&#xff0c;很难多渠道拓展&a…

基于Nvidia Jetson orin nx的 YoloV7 tensorRt加速

准备环境 安装jetPack组件 Jetpack 是 Nvidia为 Jetson系列开发板开发的一款软件开发包&#xff0c;常用的开发工具基本都包括了&#xff0c;并在在安装 Jetpack的时候&#xff0c;会自动的将匹配版本的CUDA、cuDNN、TensorRT等。官方提供套件中默认已经安装&#xff0c;可以通…

基于rosbridge 与业务系统长链接网关架构设计

技术背景&#xff1a; 业务系统&#xff1a;管理机器人&#xff0c;机器人任务执行等等 机器人使用是ros1 &#xff0c;业务系统与机器人交互使用rosbridge, rosbridge 就是websocket 链接&#xff0c;所以就有了如下的一些架构思想 架构图 客户端 客户端主要分为app端、pc端…

又双叒!宏电5G RedCap工业智能网关获得首个基于RedCap终端场景的华为技术认证

近日&#xff0c;宏电Z2 V20 5G RedCap工业智能网关率先通过华为OpenLab全球开放实验室的系列严格验证流程&#xff0c;完成基于华为RedCap终端场景的兼容性测试&#xff0c;首个获得华为Cloud Open Labs授予的HUAWEI COMPATIBLE证书及其相关认证徽标使用权。 宏电5G RedCap工业…

SAP-PP-MRP-策略组流程演示

策略组10 按库存生产&#xff0c;按库存生产就不考虑其他了&#xff0c;说明库存不足&#xff0c;或者说预测下一阶段销售&#xff0c;库存不足了&#xff0c;那么就需要提前安排生产。 策略组10按库存生产操作流程TCODE操作说明注意事项MM01创建物料成品MM01创建物料原材料C…

vscode + gdb +gdbserver 远程调试Pg源码

本文主要介绍如何通过window或者macos远程调试虚拟机的postges源码 安装pg13调试版本 安装调试版postgres13,此处忽略 安装vscode(window macos) 安装插件 Remote Development 插件安装插件C/C 安装gdb gdbserver(远程虚拟机) yum install gdb yum install gdb-gdbserver…