Use*_*234 6 macos cocoa objective-c
我需要确定Internet连接是否可用.我不在乎它是如何连接的(WI-FI,Lan等......).我需要确定,是否可以使用Internet连接.
PS我找到了一种检查WI-FI连接的方法.但我不在乎它是如何连接的(我需要检查所有可以连接到Internet的方式).
像(isConnected)的东西
我希望这段代码适用于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;
}
Run Code Online (Sandbox Code Playgroud)
看一下SCNetworkReachability参考文献.这是一个C API,因此它不像单个方法调用那样容易使用,但是当特定地址通过网络可访问或无法访问时,它可以很好地通知您的应用程序.
大纲是你将用SCNetworkReachabilityCreateWithAddress或创建一个对象SCNetworkReachabilityCreateWithName,然后将其添加到运行循环中SCNetworkReachabilityScheduleWithRunLoop.确定可达性并且更改时,将调用您提供的回调函数.您可以使用它来更新应用程序的状态.
Apple提供了一个示例应用程序,展示了如何使用它(虽然它是为iOS设计的,而不是Mac OS X)
| 归档时间: |
|
| 查看次数: |
5292 次 |
| 最近记录: |