AFNetworkReachabilityManager在无法访问时返回Reachable

时间:2014-09-20 21:09:25

标签: ios swift afnetworking afnetworking-2

在我的iOS应用程序中,我想监视网络中多个IP地址的可访问性。

我希望创建多个AFNetworkReachabilityManager对象来监控这些IP。

所以我按以下方式创建经理:

var server_address = sockaddr_in(
    sin_len: __uint8_t(sizeof(sockaddr_in)),
    sin_family: sa_family_t(AF_INET),
    sin_port: in_port_t(80),
    sin_addr: in_addr(s_addr: inet_addr("10.0.0.60")),
    sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)
);

item.reachabilityManager = AFNetworkReachabilityManager(forAddress: &server_address);

item对象有一个属性reachabilityManager,用于存储管理器,不会超出范围

在经理初始化之后,我按照以下方式为经理设置reachabilityStatusChangeBlock,我也开始监督经理。

item.reachabilityManager!.setReachabilityStatusChangeBlock({ (status) -> Void in

switch(status) {
    case AFNetworkReachabilityStatus.NotReachable, AFNetworkReachabilityStatus.Unknown:
        NSLog("UNREACHABLE: \(item.name)");
    case AFNetworkReachabilityStatus.ReachableViaWiFi, AFNetworkReachabilityStatus.ReachableViaWWAN:
        NSLog("REACHABLE \(item.name)");
}

});

item.reachabilityManager!.startMonitoring();

如果我在reachable之后立即执行startMonitoring()它返回false,我期望

之后我的reachabilityStatusChangeBlock被触发,它告诉我我正在监控的IP是可以访问的,而我确定它不是(我目前甚至不在相同的IP范围内,并且ping到该IP当然表明另一端没有回复)。

如果我使用未知域名实例化AFNetworkReachabilityManager,则会正确返回状态。所以我知道经理工作正常。

我可以想象的一件事,导致这个,是我创建的sockaddr_in变量使用管理器,也许我搞砸了构造函数中的某个参数?

0 个答案:

没有答案