iphone - 带有 HTTPBody 输入流的 NSURLRequest : Stream sends event before being opened

标签 iphone nsurlconnection nsstream

我想使用 NSURLConnection (和 NSURLRequest)向服务器发送大量数据。为此,我创建了一对绑定(bind)的 NSStream(使用 CFStreamCreateBoundPair(...))。然后,我将输入流传递给 NSURLRequest (-setHTTPBodyStream:) 并在当前运行循环上安排输出流。当运行循环继续时,我收到发送数据的事件,并且输入流将此数据发送到服务器。

我的问题是,只有当数据适合成对流之间的缓冲区时,这才有效。如果数据较大,则输入流会以某种方式获取事件(我假设“字节可用”),但 NSURLConnection 尚未打开输入流。这会导致打印错误消息并且不会发送数据。

我试图在我的 -stream:handleEvent: 方法中捕获这个问题,方法是简单地返回输入流尚未打开的情况,但随后我的输出流获得流关闭事件(可能是因为我从未当我可以的时候发送数据)。

所以我的问题是:如何正确使用 NSURLConnection 的绑定(bind)流对?

(如果这很重要:我正在 iOS 平台上开发)

感谢任何帮助!

干杯,马库斯

最佳答案

好吧,我通过延迟启动上传来解决这个问题,以便在 NSURLConnection 有时间设置其输入流之后启动。

但这并不是我所说的干净的解决方案,因为依赖 -performSelector:withObject:afterDelay: 似乎有点 hacky。

因此,如果其他人有解决方案,我仍然愿意接受任何建议。

关于iphone - 带有 HTTPBody 输入流的 NSURLRequest : Stream sends event before being opened,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3414484/

相关文章:

iphone - 当工具栏或导航栏在屏幕上或屏幕外显示动画时,平滑地调整导航 View 的大小

iphone - 如何将字符串中的单个字符保存到 NSDictionary 对象中

ios - 如何在 Swift 上检查 sendSynchronousRequest 中的 Response.statusCode

ios - 我怎样才能回到我的主处理线程?

ios - 如何在另一个线程上正确打开和关闭 NSStream

ios - 如何使 UITableViewCell 滑动更粘

iphone - 调用按钮操作时 EXC_BAD_ACCESS(代码 = 2 或代码 1)

ios - NSURLConnection 失败,错误代码为 -1001、-1005、1004 以及 NSPOSIXErrorDomain Code=2

仅限 SWIFT——从 NSInputStream 读取

iphone - 锁定手机后,NSStream结束