使用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 列表理解及使用方法
Oct 27 Python
基于python log取对数详解
Jun 08 Python
python3中zip()函数使用详解
Jun 29 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
python中使用.py配置文件的方法详解
Nov 23 Python
python实现简单倒计时功能
Apr 21 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
javascript 闭包
2011/09/15 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
javascript arguments使用示例
2014/12/16 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
函数式编程入门实践(一)
2019/04/20 Javascript
vue实现信息管理系统
2020/05/30 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
python映射列表实例分析
2015/01/26 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
倡议书格式
2014/04/14 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
烟台的海导游词
2015/02/02 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers