首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iphone中使用NSURLConnection进行HTTP连接

在iphone中使用NSURLConnection进行HTTP连接
EN

Stack Overflow用户
提问于 2009-08-18 10:18:39
回答 4查看 4.7K关注 0票数 2

非常感谢你的回复。我被困在这里了。你能帮我解决这个问题吗?CFHTTPStream能解决这个问题吗?有没有其他方法来解决这个问题?谢谢。

嗨,

我正在使用NSURLConnection连接到HTTP。我应该在一段时间间隔后得到响应(响应没有从服务器关闭)。每当它们被写入时,是否可以读取它们,就像在java中的http url连接的输入流上有一个无限的while循环一样。未调用didReceiveData方法。

将其视为http推送,响应将根据其在服务器上的可用性写入。

我应该能够连接到服务器,并保持连接,直到我没有关闭连接。

谢谢你的帮助。

EN

回答 4

Stack Overflow用户

发布于 2013-02-12 16:49:48

我也在用它撞墙,但我找到了一个解决方案:

NSURLConnection似乎确实可以缓冲数据,但您可以通过在响应头中设置内容类型来欺骗它。例如,通过将内容类型设置为"text/json",我可以在响应中仅从服务器发送几个字节,而无需关闭流,并获得didReceiveData回调方法来为我提供数据。

在此之前,我必须用4k左右来填充我的响应,这样回调才能命中。

票数 4
EN

Stack Overflow用户

发布于 2009-08-18 11:13:42

NSURLConnection不会让连接永远保持活动状态;它有一个超时,如果在该超时期间没有接收到数据,它会再次关闭连接。

只有当实际有数据可用时,才会调用didReceiveData -如果您发送请求,但由于当前没有数据可用而没有从服务器返回任何内容,则预计不会调用它,不是吗?

是否调用了connectionDidFinishLoading方法?如果它被调用了,我猜NSURLConnection已经等待了数据一段时间,当没有数据到达时,它停止了-因为这个方法应该总是在NSURLConnection完成后调用,无论它是成功还是失败。

NSURLConnection基于NSURLRequest,在创建NSURLRequest时,您可以手动设置超时。尝试设置一个非常长的超时时间。超时以秒为单位(允许秒数,它是一个浮点数),因此尝试将超时设置为28800.0,即8小时,并查看连接现在是否保持打开足够长的时间,以便调用didReciveData。

还请注意,NSURLConnection不知道数据从哪里开始,从哪里结束,所以它可能会多次调用didReceiveData来处理正在发送的单个数据,您的应用程序需要自己重新组装接收到的数据,并且它必须知道这是一个完整的数据块,准备好进行处理,还是必须等待更多数据进入另一个didReceiveData回调。

更新

NSURLConnection不保证在数据到达时立即提供数据。如果它接收到一些数据,并且它仍然有空间缓存更多的数据,它将继续等待更多的数据,并将数据聚合到一个区块中,最后一次性交付整个区块。这就是为什么你的倒计时器不工作。它确实提供了所有的倒计时数据,但它是在倒计时结束后执行的,因为所有的小的倒计时更新都完美地放入了一个块中,而且HTTP头的MIME类型还声明有许多小的块在后面。为了避免不必要地频繁调用方法委托,只要NSURLConnection仍有这样做的空间,它就会在内部缓存回复内容。

我不确定你是否能用NSURLConnection做你想做的事情。我个人更喜欢使用真正的套接字连接--但我不知道这在iPhone上是否可行。

如果这对你有任何安慰,你在这里发布的URL在Firefox中工作得很好,但在Safari4中不起作用(Safari4只在末尾显示图像,而不是倒计时)。所以你在这里得到的行为和你在Safari中得到的是一样的。

票数 2
EN

Stack Overflow用户

发布于 2009-08-18 11:29:30

感谢您的回复。但我想澄清几件事。我可以看到从服务器写入的数据,但是我的didReceiveData方法没有被调用。connectionDidFinishLoading也不会被调用。已正确设置代理。我想举个例子。我如何读取这个例子发送的响应(Url)。 My application requires the same functionality.它会发送像10,9,8,7,6这样的响应……然后会出现一个图像。我们可以看到这是浏览器。但是,当我尝试通过代码连接和获取响应时,只有在倒计时结束时才会得到响应&数据也非常大(我认为是图像数据)。每次发送之前的小回复时,我如何阅读它们?

谢谢你的帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1293026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档