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基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
python实现八大排序算法(1)
Sep 14 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
Python3 log10()函数简单用法
Feb 19 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
python如何建立全零数组
Jul 19 Python
Python函数__new__及__init__作用及区别解析
Aug 31 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
测试php函数的方法
2013/11/13 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python创建文件和追加文件内容实例
2014/10/21 Python
Python的另外几种语言实现
2015/01/29 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
python xml解析实例详解
2016/11/14 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python是如何进行类型转换的
2013/06/09 面试题
工业学校毕业生自荐信范文
2014/01/03 职场文书
质检部经理岗位职责
2014/02/19 职场文书
安全宣传标语
2014/06/10 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
导游词之山海关
2019/12/10 职场文书