如何在OS X cocoa应用程序中检查互联网连接? 可以为此目的重用Apple的iOS Reachability示例代码吗?
谢谢,
纳瓦
答案 0 :(得分:19)
Apple网站上列出并在上面引用的当前版本的Reachability代码(2.2)不会按原样编译Mac OS X Cocoa应用程序。常量kSCNetworkReachabilityFlagsIsWWAN仅在编译TARGET_OS_IPHONE和Reachability.m引用该常量时可用。您需要#ifdef Reachability.m中的两个位置,如下所示引用它:
#if TARGET_OS_IPHONE
(flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-',
#else
0,
#endif
和
#if TARGET_OS_IPHONE
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
// ... but WWAN connections are OK if the calling application
// is using the CFNetwork (CFSocketStream?) APIs.
retVal = ReachableViaWWAN;
}
#endif
答案 1 :(得分:10)
此代码可帮助您查找互联网是否可以访问:
-(BOOL)isInternetAvail
{
BOOL bRet = FALSE;
const char *hostName = [@"google.com" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkConnectionFlags flags = 0;
if (SCNetworkCheckReachabilityByName(hostName, &flags) && flags > 0)
{
if (flags == kSCNetworkFlagsReachable)
{
bRet = TRUE;
}
else
{
}
}
else
{
}
return bRet;
}
有关详细信息,请查看iphone-reachability
答案 2 :(得分:7)
不推荐使用Unicorn的解决方案,但您可以使用以下代码获得相同的结果:
SCNetworkReachabilityRef target;
SCNetworkConnectionFlags flags = 0;
Boolean ok;
target = SCNetworkReachabilityCreateWithName(NULL, hostName);
ok = SCNetworkReachabilityGetFlags(target, &flags);
CFRelease(target);
答案 3 :(得分:2)
Apple有一个很好的代码可以帮到你。您可以检查您的连接是用于实时的WiFi还是仅用于小区/ WiFi。 link text
答案 4 :(得分:0)
我知道这是一个旧线程,但是对于2018年遇到此问题的任何人,有一个使用Process
和ping
命令的更简单,更快捷的解决方案。
Swift 4示例:
func ping(_ host: String) -> Int32 {
let process = Process.launchedProcess(launchPath: "/sbin/ping", arguments: ["-c1", host])
process.waitUntilExit()
return process.terminationStatus
}
let internetAvailable = ping("google.com") == 0
print("internetAvailable \(internetAvailable)")