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 XML RPC服务器端和客户端实例
Nov 22 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
Python Web框架Tornado运行和部署
Oct 19 Python
Python实现多属性排序的方法
Dec 05 Python
django框架防止XSS注入的方法分析
Jun 21 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
python装饰器代替set get方法实例
Dec 19 Python
Django 批量插入数据的实现方法
Jan 12 Python
Python递归实现打印多重列表代码
Feb 27 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
pandas统计重复值次数的方法实现
Feb 20 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
Phpbean路由转发的php代码
2008/01/10 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
10个php函数实用却不常见
2015/10/13 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
HTML5等待加载动画效果
2017/07/27 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
成语的广告词
2014/03/19 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
Nginx反向代理学习实例教程
2021/10/24 Servers