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


Posted in Python onJuly 28, 2018

本文实例为大家分享了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()

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

Python 相关文章推荐
在Python中移动目录结构的方法
Jan 31 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
Python标准库shutil用法实例详解
Aug 13 Python
Django 路由系统URLconf的使用
Oct 11 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
Django学习笔记之为Model添加Action
Apr 30 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
Python如何对齐字符串
Jul 30 Python
python tkinter模块的简单使用
Apr 07 Python
python使用tornado实现简单爬虫
Jul 28 #Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 #Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 #Python
Python Socket编程之多线程聊天室
Jul 28 #Python
python实现点对点聊天程序
Jul 28 #Python
基于python实现聊天室程序
Jul 27 #Python
Python中return self的用法详解
Jul 27 #Python
You might like
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue实现搜索功能
2019/05/28 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python微信公众号开发平台
2018/01/25 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
解决python报错MemoryError的问题
2018/06/26 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
python实现最短路径的实例方法
2020/07/19 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
医学类个人求职信范文
2014/02/05 职场文书
四风问题自查报告剖析材料
2014/02/08 职场文书
书香校园活动方案
2014/02/28 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
协议书样本
2014/04/23 职场文书
项目建议书范文
2014/05/12 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
团干部培训方案
2014/06/03 职场文书
档案管理员岗位职责
2015/02/12 职场文书
爱心捐助活动总结
2015/05/09 职场文书
Pandas搭配lambda组合使用详解
2022/01/22 Python
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers