iOS NSURLConnection:如何知道所有字节都已发送?
Posted
技术标签:
【中文标题】iOS NSURLConnection:如何知道所有字节都已发送?【英文标题】:iOS NSURLConnection: How to know that all bytes have been sent? 【发布时间】:2017-05-15 15:06:36 【问题描述】:我对收到的任何字节都不感兴趣。我只想知道是否所有字节都已发送(奖励:加上服务器通过 TCP-ACK 确认)。这在不良网络和网络切换情况下尤其有趣。
我更喜欢用 NSURLConnection / NSURLConnectionDelegate 来做,猜想这些类不提供,URLSession(Delegate) 也不提供。
不幸的是,到目前为止,我只看到了如何查看接收到的字节。
有谁知道如何找出发送的字节数?
【问题讨论】:
【参考方案1】:NSURLConnection
已被弃用。您不应该将它用于新的开发,而应该将您现有的代码从中迁移出来。
URLSession
的各种委托方法将通知您会话任务的进度。
例如,URLSessionTaskDelegate
方法 urlSession(_:task:didCompleteWithError:)
会在您的任务完成时通知您。
URLSessionTaskDelegate
方法 urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)
将告诉您发送的字节数。
第二种方法似乎信息更丰富,更接近你想要的。
【讨论】:
嗨,邓肯。这可能是最好的答案,但不幸的是它仍然很不令人满意:1)它只报告正文数据,但 HTTP/S 增加了我需要确保它也发送的大量开销,2)它没有解决字节是否只是sent or also TCP-ACK'd, 3)三种可能的下载任务都有各自的缺点:这里上传当然是错误的类型,数据不在后台运行,下载听起来只能写到一个直接存档。以上是关于iOS NSURLConnection:如何知道所有字节都已发送?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 中使用 NSURLConnection 以串行顺序下载文件
我们如何在 iPhone Xcode 中处理多个 NSURLConnection?
NSURLConnection 以错误 iOS13 模拟器和 MACOS 10.14.6 完成