[寒江孤葉丶的Cocos2d-x之旅_34]ODSocket(BSDSocket)如何在切換網路狀態時自動重連
阿新 • • 發佈:2019-02-08
原創文章,歡迎轉載,轉載請註明:文章來自[寒江孤葉丶的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