cocos2dx網路連接
Ⅰ cocos2dx 弱聯網 怎麼做
下面是官方給出的教程
介紹
HttpClient是HTTP客戶端的介面。HttpClient封裝了各種對象,處理cookies,身份認證,連接管理等。
概念
HttpClient的使用一般包含下面6個步驟:
創建 HttpRequest 的實例;
設置某種連接方法的類型(GET、POST等),這里通過setUrl傳入待連接的地址;
設置響應回調函數,讀取response;
添加請求到HttpClient任務隊列;
釋放連接。無論執行方法是否成功,都必須釋放連接;
對得到後的內容進行處理。
如何使用
HttpRequest 實例
我們將使用HttpRequest無參數的構造函數,它為大多數情況提供了一個很好的默認設置,所以我們使用它。
cocos2d::extension::HttpRequest* request = new cocos2d::extension::HttpRequest();
設置連接方法的類型和待連接的地址
由HTTP規范定義的各種方法對應各種不同的HttpRequest類。
我們將使用Get方法,這是一個簡單的方法,它只是簡單地取得一個URL,獲取URL指向的文檔。
request->setRequestType(HttpRequest::Type::GET);
request->setUrl("");
設置回調
無論伺服器返回怎樣的狀態,響應主體response body總是可讀的,這至關重要。
request->setResponseCallback(this,httpresponse_selector(HelloWorld::onHttpComplete));
在onHttpComplete里讀取響應數據:
std::vector *buffer = response->getResponseData();//Get the request data pointer back
添加請求到HttpClient任務隊列
cocos2d::network::HttpClient::getInstance()->send(request);
釋放連接
這是一個可以讓整個流程變得完整的關鍵步驟, 我們必須告訴HttpClient,我們已經完成了連接,並且它現在可以重用。如果不這樣做的話,HttpClient將無限期地等待一個連接釋放,以便它可以重用。
要釋放連接,使用:
request->release();
處理響應
現在,我們已經完成了與HttpClient的交互,可以集中精力做我們需要處理的數據。在這個例子中,我們僅僅將它在控制台上輸出。
// mp data
std::vector *buffer = response->getResponseData();
printf("Http Test, mp data: ");
for (unsigned int i = 0; i <</span> buffer->size(); i++)
{
printf("%c", (*buffer)[i]);
}
printf("\n");
如果你需要把response作為一個流來讀取它裡面的信息,上面的步驟將會同如何解析這個連接結合,當你處理完所有的數據後,關閉輸入流,並釋放該連接。
GET請求示例
下面是一個通過HttpClient的HTTP GET請求的例子。
HttpRequest* request = new HttpRequest();
request->setUrl("");
request->setRequestType(HttpRequest::Type::GET);
request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestCompleted));
request->setTag("GET test111");
cocos2d::network::HttpClient::getInstance()->send(request);
request->release();
POST請求示例
下面將發送一個POST請求到URL逗地。
HttpRequest* request = new HttpRequest();
request->setUrl("");
request->setRequestType(HttpRequest::Type::POST);
request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestCompleted));
// write the post data
const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
request->setRequestData(postData, strlen(postData));
request->setTag("POST test1");
cocos2d::network::HttpClient::getInstance()->send(request);
request->release();
處理網路回調函數
void HelloWorld::onHttpRequestCompleted(HttpClient *sender, HttpResponse *response)
{
if (!response)
{
return;
}
// You can get original request type from: response->request->reqType
if (0 != strlen(response->getHttpRequest()->getTag()))
{
log("%s completed", response->getHttpRequest()->getTag());
}
int statusCode = response->getResponseCode();
char statusString[64] = {};
sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
_labelStatusCode->setString(statusString);
log("response code: %d", statusCode);
if (!response->isSucceed())
{
log("response failed");
log("error buffer: %s", response->getErrorBuffer());
return;
}
// mp data
std::vector *buffer = response->getResponseData();
printf("Http Test, mp data: ");
for (unsigned int i = 0; i <</span> buffer->size(); i++)
{
printf("%c", (*buffer)[i]);
}
printf("\n");
}
Android
需要注意的是,如果你是Android環境,不要忘了在您的應用程序的Manifest
中增加相應的許可權:
android:name=地android.permission.INTERNET地 />
詳細代碼可參照..\samples\Cpp\TestCpp\Classes\ExtensionsTest\NetworkTest\HttpClientTest.cpp
Ⅱ cocos2d-x中有沒有tcp/udp這樣的網路通信方式
cocos2dx 就是一個游戲引擎, 只實現了http請求. 和websocket. 純tcp協議的socket請自行用asio實現
引擎自身沒有實現。
Ⅲ cocos2d-x 3.2 lua 如何檢測網路連接是 3G 還是 wifi的網路
得用原生語言檢測。
java oc 端檢測,LUA調用。
Ⅳ cocos2dx 如何導入網路的游戲源碼
cocos2dx 如何導入網路的游戲源碼?下載下來只有class和resource文件夾,該如何導入到VS2012呢?跪求大神幫忙,網路基本沒人回答。
Ⅳ cocos2dx 手機游戲網路老是斷線 怎麼優化
其實好多時候也不一定是網路的事,如果不是正規的平台中下載的游戲也是會經常出現這樣的情況呢。你玩的是什麼游戲啊,可以在手機中下載一個應用寶,應用寶中的游戲玩起來都是比較不錯的,也都是一些正規的版本。如果游戲需要更新的話也都是會在第一時間通知大家的,比較方便。
Ⅵ cocos2dx怎樣判斷網路環境
分平台處理,利用各平台提供的系統函數來區分。安卓的你就在Java代碼寫好,然後通過JNI。IOS你就隨意就好!
望點贊一下,謝謝!
Ⅶ 怎樣判斷是否連網 cocos2dx
方法很多,簡單點你可以使用gethostbyname這個方法來看看獲取不獲取得到網路的IP,如果獲取不到,那你可以判定沒有聯網,當然這樣是不嚴謹的
Ⅷ cocos2dhttprequest算是什麼鏈接
void HallView::Qudian()
{
//網路非同步連接方法
cocos2d::extension::CCHttpRequest* postRequest=new cocos2d::extension::CCHttpRequest();
postRequest->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);//設置發送類型
postRequest->setUrl("");//設置網址
postRequest->setResponseCallback(this,callfuncND_selector(HallView::onHttpRequestCompleted));//回調函數,處理接收到的信息
string caozuo="";
CCString *data=CCString::stringWithString(caozuo);
postRequest->setRequestData(data->getCString(),data->length());//這里的代碼會接在網路地址後面,一起發送。
cocos2d::extension::CCHttpClient* httpClient=cocos2d::extension::CCHttpClient::getInstance();
httpClient->setTimeoutForConnect(10);<span style="font-family: Arial, Helvetica, sans-serif;">//設置連接超時時間</span>
httpClient->setTimeoutForRead(10);//設置發送超時時間
httpClient->send(postRequest);//設置接收數據類型
postRequest->release();//釋放
}
Ⅸ cocos2d-x 怎麼檢測網路連接
如果完全沒有學過C++ 建議看把基礎通篇閱讀 不求全理解。再學cocos2d-x的時候慢慢消化。 C++用不好 危險性是很大的。我見過量兩個 寫了4年JAVA的程序員轉到cocos2d-x轉了兩年了,寫的代碼還是內存管理漏洞百出.一眼就可以看出是基礎惹的貨.我總結的經驗是:不怕遇到不能解決的錯誤 , 就怕根本不知道這個是錯誤. 所以從基礎開始吧. 初次簡單看完也不過1-2周時間 可以的. 我感覺當時我看了兩遍,第二遍才算是通篇理解了.之後我自己都感覺自己簡直是變了個人. 遇到問題一般都可以解決,萬變不離其宗.
Ⅹ 關於cocos2d-x 製作 區域網對戰類游戲 的 聯機問題
當然可以。
不管是用wifi或者藍牙,或者說是外網,根據你的意思是想每個客戶端都能作為伺服器使用。
只是在連接的時候確認某一個客戶端作為伺服器(類似主持), 其他客戶端發起請求連接就好了。