Проверьте сетевое соединение iPhone - PullRequest
1 голос
/ 04 февраля 2011

Я разрабатываю приложение для iPhone, которое динамически извлекает данные с веб-сайта, я проверяю, подключены ли Wi-Fi и GPRS, но когда WiFi недоступен, происходит сбой приложения.

Я использую этот метод для проверки соединения.

+ (BOOL) isConnected {  
    // Part 1 - Create Internet socket addr of zero
    struct sockaddr_in zeroAddr;
    bzero(&zeroAddr, sizeof(zeroAddr));
    zeroAddr.sin_len = sizeof(zeroAddr);
    zeroAddr.sin_family = AF_INET;

    // Part 2- Create target in format need by SCNetwork
    SCNetworkReachabilityRef target = 
    SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) &zeroAddr);

    // Part 3 - Get the flags
    SCNetworkReachabilityFlags flags;
    SCNetworkReachabilityGetFlags(target, &flags);

    // Part 4 - Create output
    NSString *sNetworkReachable;
    if (flags & kSCNetworkFlagsReachable)
        sNetworkReachable = @"YES";
    else
        sNetworkReachable = @"NO";

    NSString *sCellNetwork;
    if (flags & kSCNetworkReachabilityFlagsIsWWAN)
        sCellNetwork = @"YES";
    else
        sCellNetwork = @"NO";


    // Get host entry info for given host
    struct hostent *remoteHostEnt = gethostbyname("google.com");
    if(remoteHostEnt == nil ) return NO;

    // Get address info from host entry
    struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0];

    // Convert numeric addr to ASCII string
    char *sRemoteInAddr = inet_ntoa(*remoteInAddr);

    NSString *s = [[NSString alloc]
                 initWithFormat:
                 @"Network Reachable: %@\n"
                 @"Cell Network: %@\n"
                 @"Remote IP: %s\n",
                 sNetworkReachable,
                 sCellNetwork,
                 sRemoteInAddr];


    // Add text
    [sCellNetwork release];
    [sNetworkReachable release];

    NSLog(@"Message:%@",s);

    return [sNetworkReachable isEqualToString:@"YES"];  
} 

Спасибо Vadivelu

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

Зачем связываться с IP-адресами?Вы можете позвонить SCNetworkReachabilityCreateWithName() напрямую вместо:

SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "google.com");
2 голосов
/ 08 февраля 2011

Поиск примера приложения Reachability на developer.apple.com

Также на GitHub есть класс Open Source NPReachability , который делает то же самое, но используетблок как обработчик.

0 голосов
/ 09 февраля 2011

Вы можете использовать скрытый UIWebView и загрузить на него веб-сайт.Затем используйте методы из UIWebView.h, чтобы определить, была ли загрузка успешной или нет.

...