我目前正在编写一些代码,以确定在Mac或iOS上是否可以发出网络请求。
在被告知查看Apple提供的Reachability类之前,我只想指出,即使使用它们,我也能得到相同的结果。因此,相反,我认为我会写我自己的书,因为这完全是我所需要的。
我已经像Apple一样发起了一个可达性对象:
+ (Reachability*) reachabilityForInternetConnection;
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress: &zeroAddress];
}
然后调用[networkStatusForFlags:flags]
(或在我的代码中等效),我有以下内容:
NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c\n",
(flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-',
(flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-',
(flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-',
(flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-',
(flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-',
(flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-'
);
BOOL thereIsInternetAccess = NO;
if ((flags & kSCNetworkReachabilityFlagsReachable) != 0 && (flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{
thereIsInternetAccess = YES;
}
else
{
thereIsInternetAccess = NO;
}
不管我的Mac的Wifi是打开还是关闭,我都将以下内容输出到控制台Reachability Flag Status: -R -----l-
,这对我来说表明存在互联网(由于R
被标记)
我想念什么吗?任何帮助将不胜感激。
注意:我正在使用iOS Simulator。不要以为那应该重要。
iOS模拟器无法正常运行。
使用系统配置框架实现网络可访问性时,确实会通过注册的回叫(SCNetworkReachabilitySetCallback
)通知Mac的网络状态已更新。但是,从我的测试来看,这些标志似乎并没有每次都正确地返回。在具有Mac应用程序目标的Mac上或iOS设备上使用相同的代码,该代码将以预期的结果运行。
模拟器永远不应成为您应用程序唯一测试手段的另一个原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句