使用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破解验证码实例详解
Dec 08 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
Python实现注册登录系统
Aug 08 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python创建或生成列表的操作方法
Jun 19 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Python 下载及安装详细步骤
Nov 04 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
解决Django中checkbox复选框的传值问题
Mar 31 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一些公用函数的集合
2008/03/27 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python安装与使用redis的方法
2016/04/19 Python
Python松散正则表达式用法分析
2016/04/29 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python多层装饰器用法实例分析
2018/02/09 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
python 二维数组90度旋转的方法
2019/01/28 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
安全检查验收制度
2014/01/12 职场文书
服务之星获奖感言
2014/01/21 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript