使用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中的多进程
Nov 06 Python
Python中is与==判断的区别
Mar 28 Python
遗传算法之Python实现代码
Oct 10 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
对pandas replace函数的使用方法小结
May 18 Python
python smtplib发送带附件邮件小程序
May 22 Python
浅谈django的render函数的参数问题
Oct 16 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
Python监听剪切板实现方法代码实例
Nov 11 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缓存设计实现代码
2011/09/30 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
详解vue路由
2020/08/05 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
python 字典修改键(key)的几种方法
2018/08/10 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python如何实现的二分查找算法
2020/05/27 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
建筑工程管理专业自荐信范文
2013/12/28 职场文书
给学校的建议书
2014/03/12 职场文书
开展读书活动总结
2014/06/30 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2016年公司新年寄语
2015/08/17 职场文书
学习经验交流会总结
2015/11/02 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript