如何在iOS中检查互联网是否处于活动状态(检查网络可用性和网页可访问性)?

时间:2016-11-27 05:40:54

标签: ios objective-c reachability connectivity

我目前正在iOS项目中工作,我需要检查手机是否连接到互联网(移动数据/ wifi)。我使用的是只能检查网络连接可用性的可达性类,但假设我手机中没有余额的情况。在那种情况下,我无法访问互联网,但仍然可访问性显示我可以通过移动网络访问互联网,因为数据连接已打开,但我无法访问该页面。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以使用connection检查:didReceiveResponse:

        NSString *urlString=@"yourUrl";
        NSURL *url=[NSURL URLWithString:urlString];
        NSURLRequest *request=[NSURLRequest requestWithURL:url];
        NSURLConnection *connection=[NSURLConnection connectionWithRequest:request delegate:self];
        [connection start];

        -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
        {
        NSLog(@"%@",response);
        [connection cancel];
        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
        int code = (int)[httpResponse statusCode];
        if (code == 200) {
            NSLog(@"File exists");
        }
        else if(code == 404)
        {
            NSLog(@"File not exist");
        }
        }
        -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
        {
        NSLog(@"File not exist");
        }

答案 1 :(得分:1)

另一个例子是,如果您未正确连接到Wifi网络 - 您的手机连接良好但无权访问互联网上的任何网页。

在这种情况下,唯一的检测方法是尝试向可靠的网站(例如www.google.com)发送网络请求。如果您对此来源的请求在一段时间(例如五秒)后超时,那么您可以安全地断定手机存在连接问题。

答案 2 :(得分:0)

您可以查看互联网连接

NSURL *scriptUrl = [NSURL URLWithString:@"http://www.google.com/"];

NSData *data = [NSData dataWithContentsOfURL:scriptUrl];
//Manual timeout of 20 seconds
[NSThread sleepForTimeInterval: 20];
if (data)
    NSLog(@"Device is connected to the Internet");
else
    NSLog(@"Device is not connected to the Internet");

请参阅此link