Доступность - для локальной сети IP-адрес - PullRequest
4 голосов
/ 25 марта 2011

Я пытаюсь проверить доступность устройства по WIFI

Я изменил код из книги Махера Али «Расширенное программирование IOS4», чтобы использовать IP-адрес следующим образом

- (BOOL) networkConnected: (NSString *) addr {
SCNetworkReachabilityFlags  flags = 0;
SCNetworkReachabilityRef    netReachability;
BOOL                        retrievedFlags = NO;

// added the "if" and first part of if statement
//
if (hasLeadingNumberInString(addr)) {
    struct sockaddr_in the_addr;
    memset((void *)&the_addr, 0, sizeof(the_addr));
    the_addr.sin_family = AF_INET;
    the_addr.sin_port = htons(1001);
    const char* server_addr = [addr UTF8String];
    unsigned long ip_addr = inet_addr(server_addr);
    the_addr.sin_addr.s_addr = ip_addr;
    netReachability =    SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (struct sockaddr*)&the_addr);      
} else {
    netReachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [addr UTF8String]);
}   
if (netReachability) {
    retrievedFlags = SCNetworkReachabilityGetFlags(netReachability, &flags);
    CFRelease(netReachability);
}
if (!retrievedFlags || !flags) {
    return NO;
}
return YES;
}

Но он всегда возвращает NO, используя IP-адрес и порт, к которым я могу подключиться (т.е. если я пропущу эту проверку, все пойдет хорошо)

Я пытаюсь подключиться к «10.0.0.59» порту 1001, что я могу сделать

он компилируется - и я прошел (на ipod) и он работает через секцию сокета кода.

netReachability возвращается как ноль.

соответствующие заголовки включены

#import "Reachability.h"
#include <CFNetwork/CFSocketStream.h>
#include <arpa/inet.h>

Кто-нибудь может заметить, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 11 января 2013

Я использую Tony Million's более новую Reachability , которая делает такие вещи очень легкими. Для этого вы можете просто сделать что-то вроде:

if([[Reachability reachabilityForLocalWiFi] isReachable]) {
    // It's reachable on wifi
}
0 голосов
/ 25 марта 2011

Не уверен, если это поможет, но я использую Reachability.h от Apple каждый раз, когда я хочу проверить, подключено ли приложение к Интернету (или любому внутреннему IP)

вот мой код

#import "Reachability.h"



if([[Reachability sharedReachability] internetConnectionStatus] == NotReachable) {
        UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"You require an internet connection via WiFi or cellular network for location finding to work." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [myAlert show];
        [myAlert release];
}else{
        // Do something 
}
...