使用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使用Flask框架获取用户IP地址的方法
Mar 21 Python
12步教你理解Python装饰器
Feb 25 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Django学习之文件上传与下载
Oct 06 Python
python interpolate插值实例
Jul 06 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
基于python图书馆管理系统设计实例详解
Aug 05 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 allow_url_include的应用和解释
2010/04/22 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
常用的javascript设计模式
2017/01/11 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
详解JavaScript事件循环机制
2018/09/07 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
python编码最佳实践之总结
2016/02/14 Python
python算法表示概念扫盲教程
2017/04/13 Python
基于python实现简单日历
2018/07/28 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python 5个实用的技巧
2020/09/27 Python
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
上班离岗检讨书
2014/09/10 职场文书
2014年团支部工作总结
2014/11/17 职场文书
公司禁烟通知
2015/04/23 职场文书