非常感谢你的回复。我被困在这里了。你能帮我解决这个问题吗?CFHTTPStream能解决这个问题吗?有没有其他方法来解决这个问题?谢谢。
嗨,
我正在使用NSURLConnection连接到HTTP。我应该在一段时间间隔后得到响应(响应没有从服务器关闭)。每当它们被写入时,是否可以读取它们,就像在java中的http url连接的输入流上有一个无限的while循环一样。未调用didReceiveData方法。
将其视为http推送,响应将根据其在服务器上的可用性写入。
我应该能够连接到服务器,并保持连接,直到我没有关闭连接。
谢谢你的帮助。
发布于 2013-02-12 16:49:48
我也在用它撞墙,但我找到了一个解决方案:
NSURLConnection似乎确实可以缓冲数据,但您可以通过在响应头中设置内容类型来欺骗它。例如,通过将内容类型设置为"text/json",我可以在响应中仅从服务器发送几个字节,而无需关闭流,并获得didReceiveData回调方法来为我提供数据。
在此之前,我必须用4k左右来填充我的响应,这样回调才能命中。
发布于 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中得到的是一样的。
发布于 2009-08-18 11:29:30
感谢您的回复。但我想澄清几件事。我可以看到从服务器写入的数据,但是我的didReceiveData方法没有被调用。connectionDidFinishLoading也不会被调用。已正确设置代理。我想举个例子。我如何读取这个例子发送的响应(Url)。 My application requires the same functionality.它会发送像10,9,8,7,6这样的响应……然后会出现一个图像。我们可以看到这是浏览器。但是,当我尝试通过代码连接和获取响应时,只有在倒计时结束时才会得到响应&数据也非常大(我认为是图像数据)。每次发送之前的小回复时,我如何阅读它们?
谢谢你的帮助。
https://stackoverflow.com/questions/1293026
复制相似问题