【问题标题】:Check when file is finished downloading in python (socket programming)在python中检查文件何时完成下载(套接字编程)
【发布时间】:2020-03-18 04:47:45
【问题描述】:

如何使用带有 TCP 客户端/服务器逻辑的套接字编程来跟踪文件下载的进度,以在没有无限 while 循环的情况下继续代码流?

【问题讨论】:

  • 甚至不清楚使用什么协议来下载文件。某些协议(如 HTTP)可能会预先发送总长度(但并非在所有情况下),而其他协议则不会,文件的结尾只是连接的关闭。关于您的特定用例以及您遇到问题的确切位置的详细信息太少了。
  • 套接字编程中的 TCP 客户端/服务器逻辑。
  • 套接字编程中没有通用的文​​件传输,因此无法给出通用的答案。
  • 请澄清。 “跟踪”不一定与“检查文件何时完成下载”是一回事。

标签: python file sockets server client


【解决方案1】:

如果您可以手动解析标头,则可以获取文件大小,在content-length 字段中,总迭代次数将为 content_length / recv_buffer_size。例如,如果您一次接收 1024 个字节并且文件大小为 4096,则迭代次数 = 4096/1024 = 4。

    total_length = content_length / buffer_size
    progressbar.set_length(total_length)   #some imaginary library
    for i in range(total_length):
      data = socket.recv(buffer_size)
      if data :
        file.write(data)
        progressbar.update(1)   #some imaginary progress-bar library
    file.close()

【讨论】:

  • 代码的客户端(相反)端呢?比如发送内容长度等
  • 总迭代次数未定义。 HTTP 或 TCP 中没有任何东西可以保证它,或者任何给定的读取都会填满缓冲区。
猜你喜欢
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
相关资源
最近更新 更多