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调用浏览器并打开一个网址的例子
Jun 05 Python
利用Python破解验证码实例详解
Dec 08 Python
Python 处理数据的实例详解
Aug 10 Python
教你学会使用Python正则表达式
Sep 07 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
将python图片转为二进制文本的实例
Jan 24 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python 去除字符串中指定字符串
Mar 05 Python
python为什么会环境变量设置不成功
Jun 23 Python
Django web自定义通用权限控制实现方法
Nov 24 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面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php比较相似字符串的方法
2015/06/05 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
php实现文件上传基本验证
2020/03/04 PHP
js玩一玩WSH吧
2007/02/23 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
详解Python用户登录接口的方法
2019/04/17 Python
Django中create和save方法的不同
2019/08/13 Python
Python类的继承super相关原理解析
2020/10/22 Python
10个示例带你掌握python中的元组
2020/11/23 Python
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
计划生育汇报材料
2014/12/26 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
Python装饰器详细介绍
2022/03/25 Python