• 断点续传项目


    while True:
    发出ls请求连接
    client.send('ls'.encode('utf8'))
    file_list = client.recv(1024)

    print('请选择文件下载:')
    # 解压缩出列表
    file_list = eval(file_list.decode('utf8'))
    for ind,val in enumerate(file_list):
    print(ind,val)

    file_choice = input('请选择你要的东西:')
    filename = file_list[int(file_choice)]


    # 断点续传:查看客户内已有的文档大小和指针位置
    file_path = os.path.join(settings.CLIENT_PATH,filename)
    if os.path.exists(file_path):
    file_size = os.path.getsize(file_path)
    client.send(str((filename,file_size)).encode('utf8'))

    else:
    client.send(str((filename,0)).encode('utf8'))

    # 飞机头
    file_head = client.recv(4)
    file_head = struct.unpack('i',file_head)[0]
    print(file_head)
    #版本1:下载
    recv_size = 0
    while recv_size <= file_head:
    file_content = client.recv(102400)
    recv_size += 10240
    print('recv_size', recv_size)
    save_file_content(filename, file_content)

    # 版本2:下载
    # recv_size = 0
    # while recv_size < file_head:
    # if file_head - recv_size > 10240:
    # file_content = client.recv(10240)
    # save_file_content(filename, file_content)
    # recv_size += 10240
    # else:
    # file_content = client.recv(file_head - recv_size)
    # save_file_content(filename, file_content)
    #
    # break

    bug1

    你每次在服务端使用我们自定义的生成器读取10个字节的内容,在客户端接收时使用100个字节接收,但是同时增加100个字节,就会出现这个问题。你想:你每发送一次数据,客户端都会接收数据,但是你发送的是10个字节的数据,客户端接收100个字节的数据是能够接收完整,但是你却让他每次增加100个字节,对于1000字节数据的文件,客户端这边100*10次=1000就能接收完整,对于服务端却需要10*(10*10)字节=1000才能发送完整,因此你的断点续传是完成了,但是无法一次性接收所有文件的内容。
    针对小文件,因为你一个服务端的while循环下来,可以把所有的数据提前发送出去,所以不会出现这个问题,也就是针对小于10*10=100个字节的数据不会出现这个问题。

  • 相关阅读:
    mssql⾥关于触发器关键字for和after的区别
    pl/sql导入、导出csv等格式文件
    从 Ctrl、Shift、Alt 键看中外差别(用哲学角度解释)
    formcreatedesigner一款开源的vue可视化表单设计器
    前端常见内存泄漏及解决方法
    使用NPM Scripts打造简单的自动化构建工作流
    关于AnyProxy
    单线程的Node.js是如何实现高并发的
    mysql存储emoji表情报错问题
    使用 MySQL Workbench 连接数据库时报错:SSL connection error: SSL is required but the server doesn't support it.
  • 原文地址:https://www.cnblogs.com/zrx19960128/p/11116230.html
Copyright © 2020-2023  润新知