Проверить подключение к Интернету в приложении cocoa

Как проверить подключение к Интернету в приложении OS X cocoa? Может ли код Apple iOS Reachability использоваться повторно для этой цели?

Спасибо,

Нава

Ответы

Ответ 1

Этот код поможет вам найти доступность Интернета или нет:

-(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-достижимость

Ответ 2

Текущая версия кода достижимости (2.2), указанная на сайте Apple и упомянутая выше, НЕ компилируется как приложение для Mac OS X Cocoa. Константа kSCNetworkReachabilityFlagsIsWWAN доступна только при компиляции для TARGET_OS_IPHONE и Reachability.m ссылок, которые являются постоянными. Вам нужно будет #ifdef в двух местах в Reachability.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

Решение Unicorn устарело, но вы можете получить эквивалентные результаты, используя следующий код:

SCNetworkReachabilityRef target;

SCNetworkConnectionFlags flags = 0;

Boolean ok;

target = SCNetworkReachabilityCreateWithName(NULL, hostName);

ok = SCNetworkReachabilityGetFlags(target, &flags);

CFRelease(target);

Ответ 4

У Apple есть хороший код, который делает это за вас. Вы можете проверить, является ли ваше соединение WiFi для instnace или просто сотовой /WiFi. текст ссылки