[已解决]cocos2d-x 怎么检测网络连接?

  • 本帖最后由 azraelee 于 2012-11-15 09:46 编辑 *

这个问题感觉上只要做联网游戏的朋友都会碰到吧~~
有没有朋友拿出来分享下阿~

ios开发置顶帖子 我也看过 但是不太好用呀~

apple官方提供的
Reachability.h和ReachabilityAppDelegate.h
怎么样混编也可以让其工作

注:本人刚学c++一个月。。。。。。。。。
--------俺是分割线-------------
看样子 高手都觉得菜鸟的提问太简单了

经过昨天一下午的研究 参照CocosDenshion的SimpleAudioEngin相关的代码
写了一份类似的Reachability代码,经过测试可以用了。。。哎。。。
当然代码很简单,对于新手来说这个不容易呀。。。
下面就把代码分享一下,高手可以略过~~

哎 论坛人气不够呀。。。

  • 本帖最后由 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)这个函数如果有朋友懂,请分享一下,谢谢大家!

mark 备用

不错,以后再用!