如何检查OS X应用程序中是否有可用的网络?

时间:2013-04-09 09:05:02

标签: xcode macos networking network-programming

在我的应用程序中,我想检查当前OS X系统中是否存在任何类型的现有网络。以太网或互联网或Wifi或3G卡或任何其他类型的网络通信。

我怎样才能做到这一点?

谢谢!


https://stackoverflow.com/questions/5662298...

感谢bdashcody!我做了我的作业,发现了上面的另一个答案。但这是针对iPhone的,我在下面做了一些修改。

- (BOOL)isAnyNetworkExist
{
    struct sockaddr_in nullAddress;

    bzero(&nullAddress, sizeof(nullAddress));
    nullAddress.sin_len = sizeof(nullAddress);
    nullAddress.sin_family = AF_INET;

    SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*) &nullAddress);

    SCNetworkReachabilityFlags flags;
    SCNetworkReachabilityGetFlags(ref, &flags);
    CFRelease(ref);     /* !!! */

    AMCDebug(@"Flag: 0x%08X", flags);
    if (0 != (flags & kSCNetworkFlagsIsLocalAddress))
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

我只检查“ kSCNetworkFlagsIsLocalAddress ”,但我不确定这是否正常。

当我删除所有网络连接时,我尝试了该标志,它返回0x07。

1 个答案:

答案 0 :(得分:1)

你应该看看SCNetworkReachability。通常,您将创建可访问性对象并将其添加到运行循环中,并且当它可以访问时您将获得回调。有关详细信息,请参阅this帖子 另请查看SCNetworkConfiguration:您可以浏览系统中的所有接口,看看是否有任何接口连接。
你也可以看一下SCDynamicStore。苹果邮件列表中有一个example