没有调用ios NSURLConnectionDataDelegate didReceiveData回调

时间:2013-07-04 08:59:41

标签: c++ ios objective-c nsurlconnectiondelegate

我有问题。关于这个问题,我已经阅读了很多关于stackoverflow的主题,但没有任何帮助。 我试图通过彗星连接实现客户端 - 服务器通信。我有一个实例负责发送消息和负责接收消息的实例。 该过程如下: - 发送实例向服务器发送GET请求,服务器响应接收实例。 第一个调用工作正常,我得到第一个响应并且可以获得我需要的数据,但是下一个请求不会使我的didReceiveData回调触发。但我看到服务器已发送数据,我在服务器日志中看到它,我在客户端机器的wireshark中看到它。一个有趣的事情:在我将“content-length:0”添加到响应之前,第一个响应没有让我的回调触发。 NSUrlConnection的未记录功能?我还应该考虑使NSUrlConnection认为响应有效吗? 替代方法:强制从套接字获取数据,但我不知道是否可以使用NSUrlConnection(man是静音的)

持久连接代码:

  NSURL* requestUrl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:rq->url.c_str()]];
  NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:requestUrl   cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:600];
  m->connection = [[NSURLConnection alloc] initWithRequest:request delegate:request_delegate() startImmediately:NO];

  [m->connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                              forMode:NSDefaultRunLoopMode];
  [m->connection start];

1 个答案:

答案 0 :(得分:0)

nginx服务器需要将标题部分“content-length”设置为大的,因为客户端获取数据包并增加接收的字节数,并且在接收到标头中设置的字节数后 - 它将不再需要任何响应。省略内容长度部分将阻止委托调用。这就是原因