使用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在命令行下使用google翻译(带语音)
Jan 16 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
python函数超时自动退出的实操方法
Dec 28 Python
java关于string最常出现的面试题整理
Jan 18 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
php中对2个数组相加的函数
2011/06/24 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
常用jQuery选择器总结
2014/07/11 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
python利用OpenCV2实现人脸检测
2020/04/16 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
使用python计算三角形的斜边例子
2020/04/15 Python
用Python制作音乐海报
2021/01/26 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
写给保洁员表扬信
2014/01/08 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
读群众路线的心得体会
2014/09/03 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
见习报告的格式
2014/11/04 职场文书
逃课检讨书
2015/01/26 职场文书
苏州园林导游词
2015/02/03 职场文书
网络研修随笔感言
2015/11/18 职场文书
2016年父亲节寄语
2015/12/04 职场文书