我需要确定Internet连接是否可用。我不在乎它是如何连接的(WI-FI,Lan等......)。我需要确定,是否可以使用Internet连接。
P.S。我找到了一种检查WI-FI连接的方法。但我不在乎它是如何连接的(我需要检查所有可以连接到Internet的方式)。
像(isConnected)
之类的东西答案 0 :(得分:9)
我希望此代码适用于iOS和OSX平台。
#include <SystemConfiguration/SystemConfiguration.h>
static BOOL isInternetConnection()
{
BOOL returnValue = NO;
#ifdef TARGET_OS_MAC
struct sockaddr zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sa_len = sizeof(zeroAddress);
zeroAddress.sa_family = AF_INET;
SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithAddress(NULL, (const struct sockaddr*)&zeroAddress);
#elif TARGET_OS_IPHONE
struct sockaddr_in address;
size_t address_len = sizeof(address);
memset(&address, 0, address_len);
address.sin_len = address_len;
address.sin_family = AF_INET;
SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithAddress(NULL, (const struct sockaddr*)&address);
#endif
if (reachabilityRef != NULL)
{
SCNetworkReachabilityFlags flags = 0;
if(SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);
BOOL connectionRequired = ((flags & kSCNetworkFlagsConnectionRequired) != 0);
returnValue = (isReachable && !connectionRequired) ? YES : NO;
}
CFRelease(reachabilityRef);
}
return returnValue;
}
答案 1 :(得分:8)
查看SCNetworkReachability
参考。这是一个C API,因此它不像单个方法调用那样容易使用,但是当特定地址可通过网络访问或无法访问时,它可以很好地通知您的应用程序。
概括的是,您将使用SCNetworkReachabilityCreateWithAddress
或SCNetworkReachabilityCreateWithName
创建一个对象,然后使用SCNetworkReachabilityScheduleWithRunLoop
将其添加到运行循环中。确定可达性并且更改时,将调用您提供的回调函数。您可以使用它来更新应用程序的状态。
Apple提供的an example app显示了如何使用它(虽然它是专为iOS而非Mac OS X设计的)
答案 2 :(得分:3)
一种方法是:
// Check whether the user has internet
- (bool)hasInternet {
NSURL *url = [[NSURL alloc] initWithString:@"http://www.google.com"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5.0];
BOOL connectedToInternet = NO;
if ([NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]) {
connectedToInternet = YES;
}
//if (connectedToInternet)
//NSLog(@"We Have Internet!");
[request release];
[url release];
return connectedToInternet;
}