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使用心得之获得github代码库列表
Jun 25 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
Python利用IPython提高开发效率
Aug 10 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python ddt数据驱动最简实例代码
Feb 22 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
python输入错误后删除的方法
Oct 12 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
python源码剖析之PyObject详解
May 18 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实现将GB编码转换为UTF8
2006/11/25 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python解析nginx日志文件
2015/05/11 Python
python针对excel的操作技巧
2018/03/13 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
学校标语大全
2014/06/19 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
2015年女生节活动总结
2015/02/27 职场文书
安全教育片观后感
2015/06/17 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
Django实现翻页的示例代码
2021/05/24 Python
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL