5

我在我的应用程序中使用了 NSURLConnection(异步),它在 wifi(iOS5 和 iOS6)上运行良好。但它与 3G 产生了问题。当我运行我的应用程序 3G 连接时,我的 didReceiveData 方法中没有任何数据。

我已将日志放入我的委托方法中,但在使用 3G 时,请求超时。可能是什么问题。

编辑:在服务器端 - >它表明我的请求已发送到服务器&服务器也已将响应发送到客户端。

编辑2:

我写的代码如下。

NSURL *url = [NSURL URLWithString:@"someURL"];

NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url     
 cachePolicy:NSURLRequestUseProtocolCachePolicy                                   
 timeoutInterval:40.0];

//[req setHTTPShouldUsePipelining:YES];

[req setValue:@"x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"someValue" forHTTPHeaderField:@"Accept"];
[req setValue:@"myCrdentails" forHTTPHeaderField:@"Authorization"];
[req setHTTPMethod:@"GET"];

[[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];

响应头如下

< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Content-Type: text/event-stream; charset=utf-8
< Connection: keep-alive
< Transfer-Encoding: chunked
4

4 回答 4

1

在为这个问题挣扎了几个小时后,我终于找到了一个可行的解决方案。NSMutableURLRequest对象有一个方法来设置是否允许蜂窝网络:

[req setAllowsCellularAccess:YES];

尽管NSURLRequest类型的对象的默认值似乎是YES,但它为我解决了这个问题。

希望这会帮助像我这样在这个问题上苦苦挣扎并最终解决这个问题的人。

于 2013-05-05T19:21:57.023 回答
0

超过 3g的问题NSURLConnection是超时,基本上是你无法控制的,,

如果您正在将数据上传或流式传输到服务器并且该数据在那里处理并且需要超过NSURLConnection时间阈值或者连接太慢,则连接将被关闭并返回NULL数据..因为连接进入空闲状态......

要克服这样的问题,您需要让 web 服务发送一个空数据包“空格”您将看到didReceiveData在每个数据包到达时调用..

空格不会影响receivedData.. 在我的情况下,响应是 aJSON并且我JSonKit用来解析它 ,,...

希望它会帮助某人..

于 2013-06-09T12:25:02.910 回答
0

这是https吗?我想知道是否可能会发生一些 SSL 验证失败...您是否尝试过从 curl over 3G 查询这个?如果蜂窝运营商代理并且没有为您提供有效数据,或者如果它的 IP 相关(黑名单、封闭端口等),那么您可能会得到不同的响应。我肯定会用 curl 测试。要么来自一部破牢的手机,要么来自被束缚的手机。

于 2012-11-11T19:17:58.143 回答
0

尝试使用可达性框架并检查它是否为 3G 返回 false。如果它确实返回 true 并且您仍然得到超时,请尝试转到同步模型并查看会发生什么。可能是连接正常,但有些东西拦截了你的回调。

于 2012-10-28T15:14:40.107 回答