NSURLConnection sendSynchronousRequest的奇怪/怪异行为

时间:2014-10-22 14:13:37

标签: ios objective-c nsurlconnection

我正在向服务器发送请求(XML格式的MySql查询)以获取记录。

一切都像预期的那样完美无缺。我使用这种方式获得记录两个月.....昨天我刚遇到一个奇怪的问题,

我有来自不同供应商(互联网供应商公司)的两个互联网连接,当我只是更改我的WiFi设置以访问 SECOND 互联网连接时, NSURLConnection请求未在服务器上接收且没有响应在App 。我只是在测试阶段设置了一个断点并检查所有代码是否正在编译但是 nil Respose。

我再次将WiFi设置更改为第一次 Internet连接,再次将没有请求发送到服务器并且没有响应

One Important thing is that, In this testing Period Since Yesterday,
Three times the Request is sent to Server and I Got Response.

为什么这一切都在发生,可能是什么问题...... ???

这不是当时没有互联网可用性的问题。我一直在浏览和检查互联网是否正常运行。

今天我只是退出XCode并重新启动并使用FIRST互联网连接,现在一切都恢复正常了。

再次问题是这里的问题是什么...... ???

这是我用来从服务器发送请求和获取响应的代码。

NSString *message = @"XML Contains MySql Query";
NSError *error;
NSURLResponse *response;
NSURL *uRL = [NSURL URLWithString:@"http://xxxxxxxxxxxxxx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:uRL];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[message dataUsingEncoding:NSUTF8StringEncoding]];

NSData *xmldata = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: &error];

if (xmldata == nil)
    {
        NSLog(@"response: %@", response);
        NSLog(@"error:    %@", error);
    }    
NSString *data = [[NSString alloc] initWithData:xmldata encoding:NSASCIIStringEncoding];

这是我收到的响应和错误

response: (null)
error:    Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."    
UserInfo=0x7a6bafa0 {NSErrorFailingURLStringKey=http:/xxxxxxxx, _kCFStreamErrorCodeKey=57,
NSErrorFailingURLKey=http://xxxxx, NSLocalizedDescription=The network connection was lost.,
_kCFStreamErrorDomainKey=1, NSUnderlyingError=0x7a7ddb80 "The network connection was lost."}

1 个答案:

答案 0 :(得分:1)

由于连接可能超时(“网络连接丢失了。”):调查一下。

您可以使用Charles Proxy来查看流量,它会为您提供连接时间。也许您可以设置更长的超时或服务器可能有超时限制。

我会首先调查连接时间,然后该信息可以帮助我决定接下来要做什么。

上一个:
当出现错误时,获取并检查返回值是有意义的。

示例代码:

NSError *error;
NSHTTPURLResponse *response;
NSData *xmldata = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (xmldata == nil) {
    NSLog(@"response: %@", response);
    NSLog(@"error:    %@", error);
}