使用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基础教程之对象和类的实际运用
Aug 29 Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
python 学习GCN图卷积神经网络
May 11 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
使用 php4 加速 web 传输
2006/10/09 PHP
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
npm的lock机制解析
2019/06/20 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
Python装饰器原理与用法分析
2018/04/30 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
简历自我评价怎么写好呢?
2014/01/04 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
公司欠款证明
2015/06/24 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书