使用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 20 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
对Python3中的input函数详解
Apr 22 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
在python中安装basemap的教程
Sep 20 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
python3多线程知识点总结
Sep 26 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
Python定义一个函数的方法
Jun 15 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
javascript this用法小结
2008/12/19 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
React优化子组件render的使用
2019/05/12 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
python实现中文输出的两种方法
2015/05/09 Python
Python类的动态修改的实例方法
2017/03/24 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python 实现两个线程交替执行
2020/05/02 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
2017年寒假社区服务活动总结
2016/04/06 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
MySQL创建管理子分区
2022/04/13 MySQL