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用fork来创建子进程注意事项
Jul 03 Python
Python中字典和JSON互转操作实例
Jan 19 Python
python正则实现提取电话功能
Feb 24 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
Pytest mark使用实例及原理解析
Feb 22 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
Apr 07 Python
Numpy一维线性插值函数的用法
Apr 22 Python
python 基于Apscheduler实现定时任务
Dec 15 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
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python中的下划线详解
2015/06/24 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
python批量生成条形码的示例
2020/10/10 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
快递业务员岗位职责
2014/01/06 职场文书
化工专业求职信
2014/07/01 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏
SQL中的连接查询详解
2022/06/21 SQL Server