0

在我的应用程序中,我想检查当前 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。

4

1 回答 1

1

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

于 2013-04-10T05:27:55.890 回答