【问题标题】:iOS NSURLConnection: How to know that all bytes have been sent?iOS NSURLConnection:如何知道所有字节都已发送?
【发布时间】:2017-05-15 15:06:36
【问题描述】:

我对收到的任何字节都不感兴趣。我只想知道是否所有字节都已发送(奖励:加上服务器通过 TCP-ACK 确认)。这在不良网络和网络切换情况下尤其有趣。

我更喜欢用 NSURLConnection / NSURLConnectionDelegate 来做,猜想这些类不提供,URLSession(Delegate) 也不提供。

不幸的是,到目前为止,我只看到了如何查看接收到的字节。

有谁知道如何找出发送的字节数?

【问题讨论】:

    标签: ios networking afnetworking


    【解决方案1】:

    NSURLConnection 已被弃用。您不应该将它用于新的开发,而应该将您现有的代码从中迁移出来。

    URLSession 的各种委托方法将通知您会话任务的进度。

    例如,URLSessionTaskDelegate 方法 urlSession(_:task:didCompleteWithError:) 会在您的任务完成时通知您。

    URLSessionTaskDelegate 方法 urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:) 将告诉您发送的字节数。

    第二种方法似乎信息更丰富,更接近你想要的。

    【讨论】:

    • 嗨,邓肯。这可能是最好的答案,但不幸的是它仍然很不令人满意:1)它只报告正文数据,但 HTTP/S 增加了我需要确保它也发送的大量开销,2)它没有解决字节是否只是sent or also TCP-ACK'd, 3)三种可能的下载任务都有各自的缺点:这里上传当然是错误的类型,数据不在后台运行,下载听起来只能写到一个直接存档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2017-01-12
    • 2016-03-29
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多