如何使用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生成tensorflow输入输出的图像格式的方法
Feb 12 Python
基于python OpenCV实现动态人脸检测
May 25 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
分享提高 Python 代码的可读性的技巧
Mar 03 Python
python缺失值填充方法示例代码
Dec 24 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
js实现筛选功能
2020/11/24 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python读取yaml文件的详细教程
2020/07/21 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
星空联盟C# .net笔试题
2014/12/05 面试题
汉语专业应届生求职信
2013/10/01 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
老公爱的承诺书
2014/03/31 职场文书
生产文员岗位职责
2014/04/05 职场文书
先进员工获奖感言
2014/08/14 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
小学师德师风整改措施
2014/10/27 职场文书
详解Go语言中Get/Post请求测试
2022/06/01 Golang