python3利用tcp实现文件夹远程传输
作者:WangF0 发布时间:2023-09-03 07:44:38
标签:python,tcp,远程传输
本文实例为大家分享了python实现文件夹远程传输的具体代码,供大家参考,具体内容如下
实现功能:
通过tcp协议模拟文件夹的下载,注意是文件夹,不是文件。
下面让我们实现以下:
其中有部分功能还未实现有兴趣的可以将代码自行补全
服务器端代码:
import os
import socket
import time
# 定义全局列表用来存储子文件夹
list1 = []
def deal_file(files,dir_name,dir_socket):
# 如果打开文件时报错即files为文件夹
try:
old_file = open(os.path.join(dir_name.decode(),files),"rb")
except:
# 讲导致报错的文件夹放入全局列表等待处理
global list1
list1.append(files)
else:
#没有报错则执行读取发送关闭文件
file_data = old_file.read()
print("发送内容")
dir_socket.send(file_data)
old_file.close()
def deal_dir():
# 待完善用于处理子文件夹,需要利用递归完成
pass
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 固定端口号
tcp_socket.bind(("",9992))
# 被动套接字转换为主动套接字
tcp_socket.listen(128)
# 将队列中的客户端取出
dir_socket,client_ip = tcp_socket.accept()
#接受客户端消息
dir_name = dir_socket.recv(1024)
# 显示文件列表
file_list = os.listdir(dir_name.decode())
# 将文件列表发送至客户端
dir_socket.send(str(file_list).encode())
# 阻塞0.5s等待发送成功
time.sleep(0.5)
# 便利每个文件发送文件内容
for files in file_list:
deal_file(files, dir_name, dir_socket)
global list1
# 如果全局列表内有文件则
if list1:
# 带完善
pass
else:
dir_socket.close()
print("文件全部传输完成")
tcp_socket.close()
if __name__ == '__main__':
main()
客户端源码:
import socket
import os
import threading
import time
def recv_data(files,dir_name,tcp_socket):
file_data = tcp_socket.recv(1024)
new_file = open(os.path.join(dir_name+"新", files),"wb")
new_file.write(file_data)
new_file.close()
print("文件%s下载完成" % files)
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务器
tcp_socket.connect(("192.168.11.128", 9992))
# 向服务器发送要拷贝的文件夹
dir_name = input("请输入要拷贝的文件夹")
tcp_socket.send(dir_name.encode())
# 新建文件夹
os.mkdir(dir_name+"新")
# 接受文件列表,循环打开文件写入
file_list = tcp_socket.recv(1024)
a = eval(file_list)
print(a)
for files in eval(file_list.decode()):
recv_data(files,dir_name,tcp_socket)
if __name__ == '__main__':
main()
来源:https://blog.csdn.net/wf134/article/details/78571811


猜你喜欢
- 下面是用python写的,使用lxml来做html分析,从网上看到的,说是分析速度最快的哦,不过没有验证过。好了,上代码。 import u
- 前言:python提供了诸多的魔法方法,其中__setattr__()方法主要用于类实例进行属性赋值,其定义在Object类官方提供的说明如
- -- 任意的测试表 CREATE TABLE test_delete( name varchar(10), value INT ); go
- 一、 在数据库排序查询优化上的差异。在讲解这个内容之前,为了读者能够清楚我讲的内容,我要先谈一个概念。命中率,它是指从内存中取得数据而不从磁
- bufio 包介绍 bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了
- 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 修改MySQL下的默认mysql数据库的user表,删除所有host为localhost记录,另外添加一些其他记录,重新启动MySQL服务器
- 本文实例讲述了微信小程序基于slider组件动态修改标签透明度的方法。分享给大家供大家参考,具体如下:1、效果展示2、关键代码index.w
- 一、mysql主(称master)从(称slave)复制的原理: (1).mas
- 这篇文章主要介绍了python的time模块和datetime模块实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 一般不建议做第4,6两步,第4步不安全,有可能损坏数据库或丢失数据。第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复。
- 前言昨天因为小程序功能要获取小程序程序码,看了微信文档爬了好多坑。(留一下记录以防后面被坑)操作因为我获取到了微信那里的图片的图片流一直不知
- Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其
- 目录前言场景分析总结前言前几天,有位朋友微信联系我,告知一个生产数据库,在机器宕机恢复后,实例启动失败,而且该实例没有做任何的高可用、容灾、
- 很多时候基于php+MySQL建立的网站所出现的系统性能瓶颈往往是出在MySQL上,而MySQL中用的最多的语句就是查询语句,因此,针对My
- 目录关于Web服务器和应用服务器Python项目部署架构关于cgi、wsgi、uwsgi、http协议关于cgi、fastcgi、php-f
- 1.plt.pie()饼图 常常用来显示 整体中各部分所占的比例,在python-matplotlib库中通过plt.pie()方法来实现。
- for 循环本系列前面 “探索 Python,第 5 部分:用 Python 编程” 一文讨论了 if 语句和 while 循环,讨论了复合
- Ansible Inventory 介绍Ansible Inventory 是包含静态 Inventory 和动态 Invent
- QQ影音新版发布官网Banner经过两周的酝酿、脑爆与设计调整,于20日顺利上线,连续7天,经历了昨天激动人心的最后发布,到此告一段落,这里