【问题标题】:How to check if any network available in OS X app? [duplicate]如何检查 OS X 应用程序中是否有可用的网络? [复制]
【发布时间】:2013-04-09 09:05:02
【问题描述】:

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

【问题讨论】:

  • 这是stackoverflow.com/questions/7627058/…stackoverflow.com/questions/4367927/… 的副本。从这个问题中不清楚哪个最合适。
  • 不,该链接使用 shell 命令来执行此操作。我想要的是应用程序运行时的方式。也许这可能会工作http://stackoverflow.com/questions/4021095/...。我会继续寻找...
  • 所有链接的问题都不需要 shell 命令。他们每个人都有指向各种 SystemConfiguration API 的答案。
  • 哦,对不起!我想念你的第一个链接!我现在就试试 Reachability。
  • 非常感谢。我把我的进一步作业放在上面。你的意见呢?

标签: xcode macos networking network-programming


【解决方案1】:

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

【讨论】:

  • 我不需要那么复杂的东西。我想知道是否有可用的网络。例如,以太网卡连接到集线器,导致网卡状态为“已连接”,这表示网络可用。
  • 看看我给你的链接中的第二个答案:stackoverflow.com/questions/7627058/…
  • 一般来说,我不知道简单的方法来做到这一点。只有复杂或不那么复杂:)
  • 哈哈,也许你是对的。不知类UNIX系统中是否有通用方式。
  • 通过 exec ping 并检查结果? :)
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多