【问题标题】:How to check whether internet is active (checking both network availability & webpage accessibility) in iOS?如何在 iOS 中检查互联网是否处于活动状态(检查网络可用性和网页可访问性)?
【发布时间】:2016-11-27 05:40:54
【问题描述】:

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

我该如何解决这个问题?

【问题讨论】:

标签: ios objective-c reachability connectivity


【解决方案1】:

您可以使用 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");
        }

【讨论】:

  • 我已经检查过即使没有余额也保持我的移动数据。所以它应该打印“文件不存在”。它打印但需要很长时间。如何减少响应时间或将时间间隔设置为 5 秒。 & 如果那个时期已经结束,那么我该如何检查呢?
  • 当你创建 NSURLRequest 时,你可以提供 timeoutInterval 。 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:link] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
【解决方案2】:

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

在这种情况下,唯一的检测方法是尝试将网络请求发送到可靠的站点(例如 www.google.com)。如果您对该源的请求在设定的时间(例如 5 秒)后超时,那么您可以放心地断定手机存在连接问题。

【讨论】:

    【解决方案3】:

    您可以检查互联网连接

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多