我需要確定Internet連接是否可用。我不在乎它是如何連接的(WI-FI,Lan等)。我需要確定,Internet Connection是否可用。如何確定Cocoa中的Internet連接?
P.S.我找到了一種檢查WI-FI連接的方法。但我不在乎它是如何連接的(我需要檢查所有可以連接到Internet的方式)。
喜歡的東西(isConnected)
我需要確定Internet連接是否可用。我不在乎它是如何連接的(WI-FI,Lan等)。我需要確定,Internet Connection是否可用。如何確定Cocoa中的Internet連接?
P.S.我找到了一種檢查WI-FI連接的方法。但我不在乎它是如何連接的(我需要檢查所有可以連接到Internet的方式)。
喜歡的東西(isConnected)
看看在SCNetworkReachability
參考。這是一個C API,因此它不像調用單個方法那麼容易,但是當通過網絡可達或不可達時,通知您的應用程序的功能非常出色。
梗概是你創建一個對象與SCNetworkReachabilityCreateWithAddress
或SCNetworkReachabilityCreateWithName
,然後將其與SCNetworkReachabilityScheduleWithRunLoop
添加到運行循環。當可達性被確定並且當它改變時,你提供的回調函數將被調用。您可以使用它來更新應用程序的狀態。
蘋果提供an example app演示瞭如何使用這個(雖然它的設計適用於iOS,不支持Mac OS X)
一種方式做到這一點是:
// 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;
}
該代碼同時適用於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;
}
http://stackoverflow.com/questions/2995822/check-internet-connection-in-cocoa-application – bryanmac
的杜佩它也不是真的複製。該鏈接更多關於Iphone Internet連接。僅適用於Wi-Fi。 – User1234
@ User1234:是什麼讓您相信提問者詢問iPhone或Wi-Fi? –