代码之家  ›  专栏  ›  技术社区  ›  Nava Carmon

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

  •  14
  • Nava Carmon  · 技术社区  · 16 年前

    如何检查OS X Cocoa应用程序中的互联网连接? 苹果的iOS可访问性示例代码是否可以重复使用?

    谢谢,

    纳瓦

    5 回复  |  直到 7 年前
        1
  •  10
  •   Unicorn    16 年前

    此代码将帮助您查找是否可以访问Internet:

    -(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
  •  19
  •   Tibidabo    13 年前

    苹果网站上列出的和上面引用的可访问性代码(2.2)的当前版本并不像Mac OS X Cocoa应用程序那样编译。常量kscnetworkreachabilityflagiswwan仅在编译目标iPhone和reachability.m引用该常量时可用。您需要定义两个可到达性.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
    
        3
  •  7
  •   udondan    11 年前

    不推荐使用独角兽的解决方案,但可以使用以下代码获得等效结果:

    SCNetworkReachabilityRef target;
    
    SCNetworkConnectionFlags flags = 0;
    
    Boolean ok;
    
    target = SCNetworkReachabilityCreateWithName(NULL, hostName);
    
    ok = SCNetworkReachabilityGetFlags(target, &flags);
    
    CFRelease(target);
    
        4
  •  2
  •   krzyspmac    16 年前

    苹果有一个很好的代码,可以为你做这些。您可以检查您的连接是否为instnace的wifi或仅为cell/wifi。 link text

        5
  •  0
  •   Alejandro Cotilla    7 年前

    我知道这是一条老路,但是对于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)")
    
    推荐文章