如何使用AFNetworkReachabilityManager监控IP地址?

时间:2013-12-20 18:59:12

标签: ios ios7 afnetworking afnetworking-2

目前我的应用程序指向特定的非公共IP地址(172.16.214.214:44321),当我在工作时使用wifi时,该ip地址映射到我正在进行原型设计的服务。我设置了一个单身AFNetworkReachabilityManager

+ (AFNetworkReachabilityManager*) probe {
    static AFNetworkReachabilityManager* probe = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        struct sockaddr_in serverAddr;
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_len = sizeof(serverAddr);
        serverAddr.sin_port = htons(44321);
        serverAddr.sin_addr.s_addr = inet_addr("172.16.214.214");
        probe = [AFNetworkReachabilityManager managerForAddress:&serverAddr];
    });
    return probe;
}

我在AppDelegate中启动它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[HttpConnection probe] startMonitoring];
    NSLog(@"reachable 0: %hhd", [HttpConnection probe].reachable);
    NSLog(@"reach status 0: %d", [HttpConnection probe].networkReachabilityStatus);
    ...

正如预期的那样,这些语句分别吐出0和-1。

按下按钮,我会执行相同的NSLog()语句。似乎这些值的异步更新发生得非常快。但价值并不总是我所期望的。

如果我打开了手机的wifi,我会得到1(即reachable == YES)和2(即networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi)。这对我来说很有意义。

但如果我关闭了手机的wifi,我会得到1(即reachable == YES)和1(即networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN)。这对我没有意义。如果我运行其他查询,它最终会超时。那么为什么可达性经理对我说谎?

我配置错了吗?或者我对如何使用这个东西的理解存在缺陷?

0 个答案:

没有答案