在我的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
变量使用管理器,也许我搞砸了构造函数中的某个参数?