【问题标题】:Reachability - for local LAN IP address可达性 - 用于本地 LAN IP 地址
【发布时间】:2011-03-25 04:06:59
【问题描述】:

我正在尝试检查设备在 WIFI 上的可达性

我已经修改了 Maher Ali 的《高级 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;
}

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

我正在尝试连接到“10.0.0.59”端口 1001,我可以这样做

它确实编译了——我已经(在 ipod 上)通过了它,它正在通过代码的套接字部分运行。

netReachability 返回为零。

包含的相关标题是

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

谁能发现我做错了什么?

【问题讨论】:

  • 嗨,你找到解决办法了吗??

标签: iphone ios networking wifi reachability


【解决方案1】:

我使用 Tony Million 的 newer Reachability,这让这样的事情变得非常容易。为此,您可以执行以下操作:

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

【讨论】:

    【解决方案2】:

    不确定这是否有帮助,但每次我想检查应用程序是否连接到互联网(或任何内部 IP)时,我都会使用来自 Apple 的 Reachability.h

    这是我的代码

    #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 
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 2012-08-23
      • 1970-01-01
      • 2016-07-20
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多