0

我正在使用 NSURLConnection 与 LAN 上的 Web 服务进行通信。使用 Xcode Simulator 时,一切都按预期工作。但是,当使用 iPhone 时,连接大多会超时(但并非总是如此)。

iPhone通过wifi连接到局域网。我可以使用 Safari 持续浏览 Web 服务器(托管 Web 服务)。

但是,该应用程序大多失败。它在didFailWithError报告“请求超时”的函数中返回。

该应用程序将间歇性地成功(行为完全符合预期)。我看不出成功或失败的模式。它可能会失败几次,然后成功然后再次失败(无需重新启动应用程序)。我估计有 90% 以上的失败率。

Web 服务始终接收请求并始终响应。似乎故障发生在设备未接收或处理响应的情况下。

我看不到我的网络有明显问题。当然没有IP地址冲突。

我对应用程序、Apple、Xcode 和 iPhone 完全陌生。所以这对你来说可能是非常明显的事情。有什么想法可以解决这个问题吗?

我目前用于开发的环境如下:

  • Mac OS X (10.7.4)
  • Xcode 4(针对 4.3)
  • iPhone 3GS (5.1.1)
4

1 回答 1

0

显然我不能给你绝对的答案,但希望能帮助你找出问题所在。

首先,您需要审查您的网络服务。将 JPEG 图像放在公共 Dropbox 文件夹中。现在尝试使用您的代码下载该图像并使用 Safari 查看它。如果 Safari 可以工作,但您的代码不能,那么您知道您的代码是问题所在。

如果两者都失败,那么手机可能有一个坏的收发器,或者你的 WIFI 网络可能是不稳定的。将手机带到某个公共 WIFI 位置并重新进行测试。如果两者在第二个网络上仍然失败,则手机可能有缺陷。

如果在所有情况下 Safari 都可以工作,但您的代码不能,那么请尽可能多地发布您的代码。另外,如果使用异步接口,你会被重定向吗?要求提供证件?等等。我倾向于添加每个 NSURLConnection 委托方法并至少添加一个日志,以便您知道发生了什么 - 即记录所有响应。您还可以从响应中获取 html 返回码:

assert([response isKindOfClass:[NSHTTPURLResponse class]]);
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
htmlStatus = [httpResponse statusCode];
if(htmlStatus != 200) NSLog(@"Server Response code %i", htmlStatus);
于 2012-08-17T12:53:05.047 回答