2011-03-25 37 views
4

我试图检查设备的可达性上WIFI可达性 - 为本地局域网的IP地址

我从马赫阿里的书“高级IOS4编程”修改后的代码如下

- (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; 
} 
使用一个IP地址

但它始终没有返回使用IP地址和端口,我知道我可以连接到 (即,如果我跳过此检查,一切顺利的话)

我试图连接到“10.0.0.59”端口1001我可以做

它编译 - 我已经步入(在iPod上),它通过代码的套接字部分运行。

netReachability返回为零。

相关的报头包含有

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

任何人能发现什么,我做错了什么?

+0

嗨,你有没有找到任何解决方案? – iBhavik 2013-04-25 08:10:31

回答

0

不知道这是否帮助,但我使用Reachability.h从苹果每次我要检查,如果应用程序连接到互联网(或任何内部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 
} 
1

我用Tony Million的newer Reachability,使这样的东西很容易。要做到这一点,你可以做这样的事情:

if([[Reachability reachabilityForLocalWiFi] isReachable]) { 
    // It's reachable on wifi 
}