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益智游戏计算汉诺塔问题示例
Mar 05 Python
详解Python如何生成词云的方法
Jun 01 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python提取log文件内容并画出图表
Jul 08 Python
Python循环结构的应用场景详解
Jul 11 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
Python实现为PDF去除水印的示例代码
Apr 03 Python
Python编写车票订购系统 Python实现快递收费系统
Aug 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
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
浅谈js闭包理解
2019/04/01 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python调用API实现智能回复机器人
2018/04/10 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python守护进程实现过程详解
2020/02/10 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
python要安装在哪个盘
2020/06/15 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
小班幼儿评语大全
2014/04/30 职场文书
开展警示教育活动总结
2015/05/09 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android