使用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中何种情况下需要使用断言
Apr 01 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Python数据操作方法封装类实例
Jun 23 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
Aug 01 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
python的debug实用工具 pdb详解
Jul 12 Python
Python占用的内存优化教程
Jul 28 Python
python对XML文件的操作实现代码
Mar 27 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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安装攻略:常见问题解答(二)
2006/10/09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
react redux入门示例
2018/04/19 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
python循环监控远程端口的方法
2015/03/14 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python合并字符串的3种方法
2015/05/21 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
安全宣传标语口号
2014/06/06 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
学校四风对照检查材料
2014/08/28 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
个人先进材料范文
2014/12/30 职场文书
回复函范文
2015/07/14 职场文书