使用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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python正则表达式的使用范例详解
Aug 08 Python
初步解析Python中的yield函数的用法
Apr 03 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
Python  Django 母版和继承解析
Aug 09 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
Python基础知识之变量的详解
Apr 14 Python
python字符串的多行输出的实例详解
Jun 08 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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
javascript getElementsByTagName
2011/01/31 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Python骚操作之动态定义函数
2019/03/26 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
校园活动策划书范文
2014/01/10 职场文书
单位提档介绍信
2014/01/17 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
店铺转让协议书
2014/12/02 职场文书
结婚保证书
2015/01/16 职场文书
员工辞职信范文
2015/03/02 职场文书
自主招生专家推荐信
2015/03/26 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS