cocos2d-x 网络部分之Json数据包
更新:HHH   时间:2023-1-7


 Json 采用Jsoncpp , 从官网上下载源代码, 目录下面有2个目录:

1. jsoncpp/src/lib_json/ ,这里是json实现方法,要将以下文件加入到工程中

 

                   ../../Classes/jsoncpp/src/lib_json/json_reader.cpp \

                   ../../Classes/jsoncpp/src/lib_json/json_value.cpp \

                   ../../Classes/jsoncpp/src/lib_json/json_writer.cpp \

 

2. jsoncpp/include/json ,这里需要设置为include路径, 具体跨平台设置头文件路径,请参考:

(http://zgame.blog.51cto.com/6144241/1066817)

 

$(LOCAL_PATH)/../../Classes/jsoncpp/include/json \

//-------------------------------------------------------------------

Json使用方法: 

1. 解析

  1. #include "json.h"  
  2. using namespace std;  
  3. Json::Reader reader;  
  4. Json::Value value;  
  5.   
  6. void GameBoard::readJson(std::string net_response) {  
  7. //开始解析  
  8. if(reader.parse(net_response, value))  
  9. {  
  10. //读取string  
  11. Read_json_GameDataByString(value,"v");     
  12. Read_json_GameDataByString(value,"performance");  
  13. //解析数组  
  14. Json::Value arrayObj = value["result"];  
  15. for(unsigned int i = 0;i <arrayObj.size(); i++)  
  16. {  
  17. int errore = Read_json_GameDataByInt(arrayObj[i] ,"ecode");  
  18. ....  
  19. }  
  20. }  
  21. }  

2. 发送

  1. void GameBoard::writeJson(std::string cmd, Json::Value params) { 
  2.     std::string ss; 
  3.      
  4.     using namespace std; 
  5.     Json::FastWriter writer; 
  6.     Json::Value root; 
  7.     Json::Value arrayObj; 
  8.     Json::Value item; 
  9.     Json::Value dataArray; 
  10.     Json::Value dataItem; 
  11.  
  12.     if (cmd == kNetGameInit) 
  13.     { 

  14.         _globalData.userInfo_.guid =  "test"

  15. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
  16.  
  17.         if(!this->gameBoardDelegate->if_QQLogin()){ 
  18.         char * ttt=  this->gameBoardDelegate->Get_Andorid_Udid(); 
  19.         _globalData.userInfo_.guid =  * CCString::createWithFormat("%s",ttt); 
  20.         } 
  21.         else
  22.             // qq already set 
  23.         } 
  24.         CCLOG("_globalData.userInfo_.guid:%s",_globalData.userInfo_.guid.getCString()); 
  25. #endif 
  26.  
  27.  
  28.         item["guid"] = 0; 
  29.         item["code"] = 00; 
  30.         params["sync"]=0; 
  31.     } 
  32.     else 
  33.     { 
  34.         item["guid"] = _globalData.userInfo_.udid.m_sString; 
  35.         item["code"] = _globalData.userInfo_.authcode; 
  36.         params["sync"]=1; 
  37.     } 
  38.     item["uid"] = _globalData.userInfo_.guid.m_sString; 
  39.     item["pid"] = "2"
  40.     item["t"] = ""
  41.     item["v"] = "1.3.4"
  42.     item["key"] = "1234"
  43.     item["server"]="1"
  44.      
  45.     dataItem["cmd"] = cmd; 
  46.      
  47.  
  48.     dataItem["params"] = params; 
  49.     dataArray.append(dataItem); //数组的处理方式
  50.     item["data"] = dataArray; 
  51.      
  52.     ss =  item.toStyledString(); 
  53.     CCLOG("%s",ss.c_str()); 
  54.     ss = writer.write(item); 
  55.  
  56.     //json数据,http发送
  57.     this->gameBoardDelegate->HttpDataSend(ss); 
  58.      
  59.    

 

数据包加密在http网络收数据后和发数据前处理就可以。

 

 

 

 

 

 

返回游戏开发教程...