首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测真实的网络可用性?

如何检测真实的网络可用性?
EN

Stack Overflow用户
提问于 2010-10-12 15:54:40
回答 3查看 6.4K关注 0票数 7

当iPhone连接到无线路由器,而该路由器未连接到互联网时?我需要显示一条错误消息,说“检查您的互联网连接”我尝试了可达性示例代码。但是不走运,http://developer.apple.com/library/ios/#samplecode/Reachability/Listings/ReadMe_txt.html

当我在手机中禁用WIFI时,它工作得很好,我尝试了Checking For Internet Connectivity in Objective C示例代码"isDataSourceAvailable“,即使它不工作,任何人可以帮助我解决这个问题,真的很有用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-12 15:57:59

你可以这样做:

代码语言:javascript
复制
+ (BOOL) pingServer
{
    NSURL *url = [NSURL URLWithString:@"http://some-url-that-has-to-work/"];
    NSURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSHTTPURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:request
        returningResponse:&response error:NULL];
    return (response != nil);
}

这是一个同步请求,因此它将阻塞当前线程。您可以在后台线程中执行整个网络检查,这样阻塞它就不成问题了,或者您也可以异步发送请求。此外,您可能希望将HTTP方法设置为HEAD,这样就不会下载整个资源。

票数 10
EN

Stack Overflow用户

发布于 2010-10-12 16:53:34

我建议你和微软做同样的事情,如果真的很糟糕,你甚至可以使用他们的服务器,因为他们可能会确保这些服务器在可预见的未来是在线的。

他们查找主机名,然后访问web服务器上的一个非常小的文件。

请参阅same question on serverfault (当然是从非编程的角度)。

基本上就是查找主机名的IP地址(在该示例中为"dns.msftncsi.com"),然后访问该地址,例如http://msftncsi.com/ncsi.txt。如果你愿意,这可以通过简单的套接字编程来完成,真正的HTTP不是必需的。

在您通过查找主机名找到的IP上,打开到端口80的套接字。将字符串发送到套接字,如下所示:

代码语言:javascript
复制
"GET /msftncsi.com/ncsi.txt HTTP/1.1\nHost: msftncsi.com:80\n\n"

然后等待某些东西返回。如果返回任何内容,即使是一个字节,也意味着您可以访问Internet。

或者至少访问该服务器,在本例中是Microsoft。

票数 1
EN

Stack Overflow用户

发布于 2011-06-28 12:52:00

https://github.com/adib/asi-http-request/blob/master/External/Reachability/Reachability.h

这是git上ASI HTTPRequest项目的一部分。它扩展了苹果的例子,显然对商店中相当多的应用程序来说已经足够好了(参见ASI的墙谁在使用:http://allseeing-i.com/ASIHTTPRequest/Who-is-using-it)

无论如何,我知道答案已经被接受了,但只是为了进一步参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3912586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档