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

Nav*_*mon 14 connection macos cocoa

如何检查OS X cocoa应用程序中的Internet连接?可以将Apple的iOS Reachability示例代码重用于此目的吗?

谢谢,

纳瓦

dba*_*dge 19

Apple网站上列出并在上面引用的当前版本的可达性代码(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
Run Code Online (Sandbox Code Playgroud)

#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
Run Code Online (Sandbox Code Playgroud)


Uni*_*orn 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;
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以查看iphone-reachability


Pau*_*l N 7

不推荐使用Unicorn的解决方案,但您可以使用以下代码获得相同的结果:

SCNetworkReachabilityRef target;

SCNetworkConnectionFlags flags = 0;

Boolean ok;

target = SCNetworkReachabilityCreateWithName(NULL, hostName);

ok = SCNetworkReachabilityGetFlags(target, &flags);

CFRelease(target);
Run Code Online (Sandbox Code Playgroud)

  • 一旦你得到了标志:在我的Mac上,标志显示kSCNetworkReachabilityFlagsReachable,即使机场关闭且没有直接连接 - **"可达性"标志本身没有任何意义**.似乎有用的是:对于WiFi,检查`(flags&kSCNetworkReachabilityFlagsIsDirect)`.对于插入的Internet连接,请检查`(flags&kSCNetworkReachabilityFlagsIsLocalAddress)`.此外,当根本没有连接时,显示"kSCNetworkReachabilityFlagsTransientConnection"和"kSCNetworkReachabilityFlagsConnectionRequired"的标志. (2认同)