使用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 之编写简单乘法运算题
Feb 27 Python
Python多线程爬虫简单示例
Mar 04 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
python3 enum模块的应用实例详解
Aug 12 Python
python urllib爬虫模块使用解析
Sep 05 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
使用npy转image图像并保存的实例
Jul 01 Python
Python调用JavaScript代码的方法
Oct 27 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下Memcached入门实例解析
2015/01/05 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Django中使用group_by的方法
2015/05/26 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
python和shell获取文本内容的方法
2018/06/05 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
python怎么提高计算速度
2020/06/11 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
走群众路线学习笔记
2014/11/06 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android