- 本帖最后由 azraelee 于 2012-11-15 10:57 编辑 *
超过字数限制了,所以放到 沙发位
官方Reachability OC代码下载地址:https://developer.apple.com/library/ios/#samplecode/Reachability/
下载来后,把Reachability.h和Reachability.m Add File to “自己的工程”
可以看到Reachability.h有4个函数检测网络
--------------------OC代码--------------------
- (Reachability*) reachabilityWithHostName: (NSString*) hostName;+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;+ (Reachability*) reachabilityForInternetConnection;+ (Reachability*) reachabilityForLocalWiFi;--------------------OC代码--------------------
那我们就包装一下这几个函数,然后在C++环境下使用
1:创建一个头文件 定义 本人代码如下
-------------------C++代码--------------------// CCReachability.h// test// Created by test on 12-11-14.#ifndef test__CCReachability#define test__CCReachability
#include
class CCReachability{public: CCReachability(); ~CCReachability(); static CCReachability* ccReachability(); int myReachabilityWithHostName(const char* hostName); int myReachabilityWithAddress(const struct sockaddr_in* hostAddress); int myReachabilityForInternetConnection(); int myReachabilityForLocalWiFi();};#endif
-------------------C++代码--------------------
2:创建 .mm文件告诉编译器是混编的,
Xcode需要源文件以".mm"为扩展名,这样才能启动编译器的Objective-C++扩展。
不懂的朋友可以参考:http://blog.csdn.net/fengsh998/article/details/8010696
-------------------C++代码--------------------// CCReachability.mm// test// Created by test on 12-11-14.#include “CCReachability.h”#include “Reachability.h”
static int static_reachabilityWithHostName(const char* hostName){ Reachability r = Reachability reachabilityWithHostName:NSString stringWithUTF8String: hostName]]; return currentReachabilityStatus];}
static int static_reachabilityWithAddress(const struct sockaddr_in hostAddress){ Reachability *r = Reachability reachabilityWithAddress:hostAddress]; return currentReachabilityStatus];}
static int static_ReachabilityForInternetConnection(){ Reachability *r = Reachability reachabilityForInternetConnection]; return currentReachabilityStatus];}
static int static_ReachabilityForLocalWiFi(){ Reachability *r = Reachability reachabilityForLocalWiFi]; return currentReachabilityStatus];}
CCReachability::CCReachability(){}
CCReachability::~CCReachability(){}
static CCReachability s_CCReachability;
CCReachability CCReachability::ccReachability(){ if (! s_CCReachability) { s_CCReachability = new CCReachability(); } return s_CCReachability;}
int CCReachability::myReachabilityWithHostName(const char* hostName){ return static_reachabilityWithHostName(hostName);}
int CCReachability::myReachabilityWithAddress(const struct sockaddr_in* hostAddress){ return static_reachabilityWithAddress(hostAddress);}int CCReachability::myReachabilityForInternetConnection(){ return static_ReachabilityForInternetConnection();}
int CCReachability::myReachabilityForLocalWiFi(){ return static_ReachabilityForLocalWiFi();}-------------------C++代码--------------------
3:测试
CCReachability *r = CCReachability::ccReachability();// int status = r->myReachabilityWithHostName(“cn.cocos2d-x.org”); int status = r->myReachabilityForInternetConnection();// int status = r->myReachabilityForLocalWiFi(); CCLOG(“网络连接状态:%d”,status);
这里我封装的4个方法都是返回int类型,可以在Reachability.h看到类型定义
typedef enum { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN} NetworkStatus;
我猜意思可能是:
NotReachable:无网络
ReachableViaWiFi:Wi-Fi
ReachableViaWWAN:3G或者GPRS网络
--------俺是分割线-------------
对于struct sockaddr_in这个构造体本人完全不懂,所以没有测试
static int static_reachabilityWithAddress(const struct sockaddr_in* hostAddress)这个函数如果有朋友懂,请分享一下,谢谢大家!