侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python3利用tcp实现文件夹远程传输

Python  /  管理员 发布于 7年前   279

本文实例为大家分享了python实现文件夹远程传输的具体代码,供大家参考,具体内容如下

实现功能:

通过tcp协议模拟文件夹的下载,注意是文件夹,不是文件。

下面让我们实现以下:

其中有部分功能还未实现有兴趣的可以将代码自行补全

服务器端代码:

import osimport socketimport 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():  # 待完善用于处理子文件夹,需要利用递归完成  passdef 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 socketimport osimport threadingimport timedef 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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python如何生成网页验证码
    下一条:
    python使用tornado实现简单爬虫
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客