检查可可应用程序中的互联网连接

时间:2010-06-08 08:40:07

标签: macos cocoa connection

如何在OS X cocoa应用程序中检查互联网连接? 可以为此目的重用Apple的iOS Reachability示例代码吗?

谢谢,

纳瓦

5 个答案:

答案 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年遇到此问题的任何人,有一个使用Processping命令的更简单,更快捷的解决方案。

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)")