如何使用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运算π的值深入Python中科学计算的实现
Apr 17 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Django 全局的static和templates的使用详解
Jul 19 Python
python进程间通信Queue工作过程详解
Nov 01 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python通过socketserver处理多个链接
Mar 18 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Django 实现jwt认证的示例
Apr 30 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二维码生成
2015/10/19 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
查看大图功能代码jquery版
2013/11/05 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
详解Node.js异步处理的各种写法
2019/06/09 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
python更新列表的方法
2015/07/28 Python
Python制作数据导入导出工具
2015/07/31 Python
Python操作csv文件实例详解
2017/07/31 Python
python绘制简单折线图代码示例
2017/12/19 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
利用python画出折线图
2018/07/26 Python
python openpyxl使用方法详解
2019/07/18 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
麦当劳辞职信范文
2014/01/18 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
护理专科学生自荐书
2014/07/05 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
运动会表扬稿范文
2015/05/05 职场文书
党课主持词大全
2015/06/30 职场文书