如何使用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求解数组中两个字符串的最小距离
Sep 27 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
python版飞机大战代码分享
Nov 20 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python有序查找算法 二分法实例解析
Feb 18 Python
python实现密码强度校验
Mar 18 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
如何利用Python 进行边缘检测
Oct 14 Python
Python与C++中梯度方向直方图的实现
Mar 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和ACCESS写聊天室(十)
2006/10/09 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python调用C语言的实现
2019/07/26 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python绘制热力图示例
2019/09/27 Python
python常用排序算法的实现代码
2019/11/08 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
高二美术教学反思
2014/01/14 职场文书
会计人员岗位职责
2014/03/19 职场文书
遗产继承公证书
2014/04/09 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书