目前我的应用程序指向特定的非公共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
)。这对我没有意义。如果我运行其他查询,它最终会超时。那么为什么可达性经理对我说谎?
我配置错了吗?或者我对如何使用这个东西的理解存在缺陷?