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基础教程之python消息摘要算法使用示例
Feb 10 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
使用python实现BLAST
Feb 12 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
django自带的权限管理Permission用法说明
May 13 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 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+javascript液晶时钟
2006/10/09 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
浅析python中的分片与截断序列
2016/08/09 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
工厂总经理岗位职责
2014/02/07 职场文书
《童年》教学反思
2014/02/18 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
学习型班组申报材料
2014/05/31 职场文书
销售人才自我评价范文
2014/09/27 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
win10下go mod配置方式
2021/04/25 Golang