1. 程式人生 > >[寒江孤葉丶的Cocos2d-x之旅_34]ODSocket(BSDSocket)如何在切換網路狀態時自動重連

[寒江孤葉丶的Cocos2d-x之旅_34]ODSocket(BSDSocket)如何在切換網路狀態時自動重連

原創文章,歡迎轉載,轉載請註明:文章來自[寒江孤葉丶的Cocos2d-x之旅系列]

用於監聽IOS網路狀態切換(WIFI和移動蜂窩網路)

有什麼作用

在Socket網路遊戲中,經常會用到BSDSocket。使用者切換網路狀態時,Socket連結會斷開,如果通過Receive的返回值來判斷網路是否斷開,需要等待很長時間(4-20s)
這個時候就需要監聽IOS網路狀態切換,當發現使用者切換網路狀態時,直接重連Socket。

如何在Cocos中使用

首先將NetworkInfo.h 和 NetworkInfo.m匯入專案
NetworkInfo的Github地址

然後修改AppController.mm檔案
首先引用剛剛匯入的兩個檔案#import "NetworkInfo.h"


接下來在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函式中加入如下程式碼(註冊監聽)
註冊監聽

程式碼如下

//開啟網路狀況的監聽  
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
NetworkInfo* hostReach = [NetworkInfo reachabilityWithHostName:@"www.baidu.com"] ;//網址可以修改一個連線速度較快的
[hostReach startNotifier];  //開始監聽,會啟動一個run loop

並且在檔案中中加入網路狀態切換的回撥方法
網路狀態切換的回撥方法

程式碼如下

//網路連結改變時會呼叫的方法  
-(void)reachabilityChanged:(NSNotification *)note
{
    NetworkInfo *currReach = [note object];
    NSParameterAssert([currReach isKindOfClass:[NetworkInfo class]]);
    //TODO:重連網路
}

最後在專案中加入庫檔案SystemConfiguration.framework