如何使用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提示No module named images的解决方法
Sep 29 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
Aug 16 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
python进阶之自定义可迭代的类
Aug 20 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
python turtle绘图命令及案例
Nov 23 Python
Python实现聚类K-means算法详解
Jul 15 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开发入门教程之面向对象
2006/12/05 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
Yii核心验证器api详解
2016/11/23 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
javascript编程起步(第一课)
2007/01/10 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
python 计算文件的md5值实例
2017/01/13 Python
Django中的Model操作表的实现
2018/07/24 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
简单了解Django项目应用创建过程
2020/07/06 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
法律专业自我鉴定
2013/10/03 职场文书
施工安全协议书
2013/12/11 职场文书
《长相思》听课反思
2014/04/10 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
运动会开幕词
2015/01/28 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
公司周年庆典致辞
2015/07/30 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA