如何使用python socket模块实现简单的文件下载


Posted in Python onSeptember 04, 2020

server端:

# ftp server端
import socket, os, time
 
server = socket.socket()
server.bind(("localhost", 8080))
server.listen()
while True:
  conn, addr = server.accept()
  print("连接到客户端:", addr)
  while True:
    try: # windows会直接报错,需要捕获异常
      data = conn.recv(1024)
      if not data:
        print("客户端已断开")
        break
    except Exception as e:
      print("客户端已经断开")
      break
    cmd, filename = data.decode().split() # ex: get name.txt
    if os.path.isfile(filename):
      f = open(filename, "rb")
      # 获取文件的字节大小
      size = os.stat(filename).st_size
      conn.send(str(size).encode()) # 发送文件大小
      conn.recv(1024)
      for line in f:  # 客户端确认后发送文件内容
        conn.send(line)
      f.close()
      print("文件下载完成")
    conn.send("not file".encode())
server.close()

client端:

import socket
 
client = socket.socket()
client.connect(("localhost", 8080))
while True:
  cmd = input(">>:").strip()
  if len(cmd)==0: continue
  if cmd.startswith("get"):
    client.send(cmd.encode()) # 发送请求
    server_response = client.recv(1024)
    if server_response.decode().startswith("not"):
      print("请输入有效文件名")
      continue
    client.send(b"ready to recv file") # 发送确认
    file_size = int(server_response.decode()) # 获取文件大小
    rece_size=0
    filename = cmd.split()[1]
    f = open(filename + ".new", "wb")
    while rece_size < file_size:
      if file_size - rece_size > 1024: # 要收不止一次
        size = 1024
      else: # 最后一次了,剩多少收多少,防止之后发送数据粘包
        size = file_size - rece_size
        print("last receive:", size)
      recv_data = client.recv(size)
      rece_size += len(recv_data) # 累加接受数据大小
      f.write(recv_data) # 写入文件,即下载
    else:
      print("文件下载完成")
      f.close()
client.close()

测试案例:

如何使用python socket模块实现简单的文件下载

如何使用python socket模块实现简单的文件下载

以上就是如何使用python socket模块实现简单的文件下载的详细内容,更多关于python socket文件下载的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
python、java等哪一门编程语言适合人工智能?
Nov 13 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
python3调用windows dos命令的例子
Aug 14 Python
python numpy中cumsum的用法详解
Oct 17 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 Python
Python几种常见算法汇总
Jun 02 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
python 监控logcat关键字功能
Sep 04 #Python
如何将json数据转换为python数据
Sep 04 #Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 #Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 #Python
学习Python需要哪些工具
Sep 04 #Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 #Python
Python程序慢的重要原因
Sep 04 #Python
You might like
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
2013/06/08 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
js 获取今天以及过去日期
2017/04/11 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
详解python时间模块中的datetime模块
2016/01/13 Python
Python 含参构造函数实例详解
2017/05/25 Python
python版简单工厂模式
2017/10/16 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Python中url标签使用知识点总结
2020/01/16 Python
python 追踪except信息方式
2020/04/25 Python
Python configparser模块常用方法解析
2020/05/22 Python
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
求职简历自荐信范文
2013/10/21 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
工作睡觉检讨书
2014/02/25 职场文书
报纸媒体创意广告词
2014/03/17 职场文书