小白请教Reachability的用法

断无轻 2012-07-31 07:40:59


// 是否wifi
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

// 是否3G
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

这样判断设备网络是3G环境和WIFI环境,那么在没有WIFI也没有3G的情况怎么检测?(!IsEnableWIFI && !IsEnable3G)?

我想检测是否已不能连接上网络,一定要调用Reachability reachabilityWithHostName:@“URL”这个么?

我现在的难题是,不知道如何检测连接已断开。
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
linux_fay 2012-08-17
  • 打赏
  • 举报
回复
Reachability * wStatus = [Reachability reachabilityWithHostName:@"www.baidu.com"];
if ([wStatus currentReachabilityStatus] == NotReachable) {//这是没有网络 的情况
}else {
}

管他3G wif 2G
Gnostic_Zy 2012-08-17
  • 打赏
  • 举报
回复
-(BOOL)connectedToNetWork
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;

SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;

BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);

if (!didRetrieveFlags) {
printf("Error. Count not recover network reachability flags\n");
return NO;
}

BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}

使用这个方法先检查是否有网络连接,在进行网络类型的判断,另外2G和3G的网络是可以通过Reachability区分出来的
xiaowei4895 2012-08-16
  • 打赏
  • 举报
回复
typedef enum {
NotReachable = 0, //无网络
ReachableViaWiFi, //wifi 网络
ReachableViaWWAN // 3g网络
} NetworkStatus;

reachability有三个状态,分别对应注释里面的,(wifi 和3g都是有网络状态)。你的判断是不对的。
SUN1916 2012-08-14
  • 打赏
  • 举报
回复
[[Reachability reachabilityForInternetConnection] currentReachabilityStatus] == NotReachable

这样就是没有网络连接
Night-Wish 2012-08-08
  • 打赏
  • 举报
回复
你可以向服务器发包,如果在你设定时间内还没有收到服务器回的包,那么就说明你和服务器断开连接了
notlot 2012-08-03
  • 打赏
  • 举报
回复
两个括起来,if语句如果是这两个就走你的 反之看你是return还是什么
ixfly 2012-08-01
  • 打赏
  • 举报
回复
如果这两个都返回NO很显然网络已经断开了。。。。

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧