使用python socket分发大文件的实现方法


Posted in Python onJuly 08, 2019

思路:

使用socket传输文件过程中,如果单次传输每次只能发送一部分数据,如果针对大文件,一次传输肯定是不行的,所以需要我们在传输的时候提前把传输内容的大小先发送给客户端,在客户端循环接收数据即可。

代码部分:

一、服务器

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#environment:2.7

import os,json,time,socket
sk = socket.socket()
ip_port=('127.0.0.1',9600)
sk.bind(ip_port)
sk.listen(5)
file_path = '/root/update/123.txt'
file_name = file_path.rsplit(os.sep,1)[1] 
file_size = os.path.getsize(file_path)  #获取文件内容大小
#发送给客户端的头部信息
header_data = {
  'file_name': file_name,
  'file_size': file_size,
  'date': time.strftime('%Y-%m-%d %X',time.localtime()),
  'charset': 'utf-8'
}
while True:
  conn, addr = sk.accept()
  print("%s:%s is connect"% addr)
  request_data = conn.recv(1024)
  print(request_data)
  # 把头部内容发送过去
  conn.send(json.dumps(header_data))
  request_data1 = conn.recv(1024)
  print(request_data1)
  f = open(file_path,'r')
  content = f.read()
  #发送文件内容
  conn.sendall(content)
  conn.close()

二、客户端

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#environment:2.7

import socket,json
while True:
  sk = socket.socket()
  ip_port = ('127.0.0.1',9600)
  sk.connect(ip_port)
  user_input = raw_input('>>>:').strip()
  if len(user_input) == 0:continue
  if user_input == 'q':break
  sk.send(user_input)
  server_head_msg = json.loads(sk.recv(1024))
  print(server_head_msg)
  #文件名res_name,文件大小res_size
  res_name = server_head_msg['file_name']
  res_size = server_head_msg['file_size']
  sk.send('已经收到头部信息,你可以发送数据了')
  #下面是循环接收文件内容的部分
  num = res_size/1024.0
  if num != int(num):
    num = int(num) +1
  else:
    num = int(num)
  for i in range(num):
    content = sk.recv(1024)
    print(content)

备注:在接收服务器端发送来的文件也按照判断每次接收数据的大小来考虑,大致思路如下

res = ''
recive_size = 0
while recive_size <= res_size:
  data = sk.recv(1024)
  recive_size += len(data)
  res += data
else:
  print(res)
  print('done'.center(40,'='))

以上这篇使用python socket分发大文件的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现绘制树枝简单示例
Jul 24 Python
详解Python中的多线程编程
Apr 09 Python
Python中isnumeric()方法的使用简介
May 19 Python
Python中的推导式使用详解
Jun 03 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
Python如何在bool函数中取值
Sep 21 Python
Selenium 安装和简单使用的实现
Dec 04 Python
python查看文件大小和文件夹内容的方法
Jul 08 #Python
python 搜索大文件的实例代码
Jul 08 #Python
代码实例讲解python3的编码问题
Jul 08 #Python
Python参数类型以及常见的坑详解
Jul 08 #Python
python里运用私有属性和方法总结
Jul 08 #Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 #Python
python字符串查找函数的用法详解
Jul 08 #Python
You might like
php Static关键字实用方法
2010/06/04 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
javascript 函数参数限制说明
2010/11/19 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
Python Flask-web表单使用详解
2017/11/18 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
JPA的特点
2014/10/25 面试题
体育教师工作总结的自我评价
2013/10/10 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书