cococos 2 dxネットワークプログラミングhttp,udp,tcp,socketについて


まず概念を学ぶ
剣を持って天を測るブログから来ました。
socketソケットは、IPアドレスとポートを記述するために使用されます。ソケットは1.tcpフロー式ソケット2.udpデータグラム式ソケットに分けられます。
socketはtcp/ipプロトコルのパッケージとアプリケーションであり、それ自体はプロトコルではなく、インターフェース(API)を呼び出すものであり、TPC/IPプロトコルはトランスポート層プロトコルであり、データがどのようにネットワークで伝送されるかを主に解決するものであるとも言える。HTTPプロトコルもハイパーテキスト転送プロトコルHTTPといい、無状態接続のアプリケーション層プロトコルであり、要求-応答で構成され、標準的なC/Sモデルであり、主にデータの包装方法を解決する。HTTP接続は、「要求-応答」という方式を使用しており、要求時にまず接続を確立する必要があるだけでなく、クライアントがサーバに要求を出してから、サーバ側がデータを返信することができます。
HTTP接続はソケットと接続されています。サーバは直接にクライアントにデータを転送できます。接続が切断されるまで。HTTP接続:サーバはクライアントが要求を一度送信してからクライアントにデータを送還する必要があります。クライアントはタイミングよくサーバ側に接続要求を送信します。オンラインを維持するだけでなく、「問い合わせ」サーバに新しいデータがあるかどうか、もしあればデータをクライアントに転送します。
そんなに多くの概念的なものを話した後、この2つの方式の具体的な使用を見ます。まずHTTPプロトコルの使い方を見ます。よく使われている2つのHTTP通信方式はgetとpostがあります。この2つの方法にはどのような違いがあるかを確認してみます。2>get伝送のデータ量が小さいので、2 KBより大きくないようにしてください。3>getの安全性は非常に低く、通常はWirestharkのような強力なクローズドツールには逃げられないが、実行効率は良い。ポストの安全性は相対的にいいです。
提案:データクエリをする時はget方式で、データの追加、修正または削除をする時はpost方式で行います。
demo:環境:cocococos 2 d-lua 3.13、mac 10.11.6、xcode 8.2.1、

//
// MyNetWork.cpp
// Slither
//
// Created by Mybo on 17/3/8.
//
//

#include "MyNetWork.hpp"
#include "network/HttpRequest.h"
#include "network/HttpResponse.h"
#include "network/HttpClient.h"
using namespace cocos2d::network;
MyNetWork* MyNetWork::getInstance(){
    static MyNetWork* _instance = nullptr;
    if (_instance == nullptr) {
        _instance = new MyNetWork;
    }
    return _instance;
}
void MyNetWork::onHttpRequest(const std::string& url,HttpRequest::Type type,SEL_HttpResponse pSelector){
    auto request = new HttpRequest();
    request->setUrl(url);
    request->setRequestType(type);
    printf("onHttpRequest");
    request->setResponseCallback(this,pSelector );
    HttpClient::getInstance()->send(request);
    request->release();
}
//
// MyNetWork.hpp
// Slither
//
// Created by Mybo on 17/3/8.
//
//

#ifndef MyNetWork_hpp
#define MyNetWork_hpp

#include 
#include "cocos2d.h"
USING_NS_CC;
#include "extensions/cocos-ext.h"
#include "network/HttpClient.h"
USING_NS_CC;
USING_NS_CC_EXT;
using namespace network;

class MyNetWork :public Ref
{
public:
    static MyNetWork * getInstance();
    void onHttpRequest(const std::string& url,HttpRequest::Type type,SEL_HttpResponse pSelector);
// void onHttpRequestCompleted(Node* sender,void* data);
    //Http Response Callback
};
#endif /* MyNetWork_hpp */
以下はコールバックの方法です。

void OneBody::onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
{
    if (!response) {
        return;

    }

    if (0 != strlen(response->getHttpRequest()->getTag())) {
        log("%s completed",response->getHttpRequest()->getTag());
    }

    long statusCode = response->getResponseCode();
    char statusString[64] = {};

    sprintf(statusString, "HTTP Status Code: %ld, tag = %s",statusCode,response->getHttpRequest()->getTag());
    log("response code: %ld",statusCode);

    if (!response->isSucceed()) {
        log("response failed");
        log("error buffer: %s",response->getErrorBuffer());
        return;

    }

    std::vector<char>* buffer = response->getResponseData();
    printf("Http Test, dump data: ");
    for (unsigned int i = 0 ; i < buffer->size();i++) {
        printf("%c",(*buffer)[i]);
    }
    printf("
"
); }
呼び出し方式

    MyNetWork::getInstance()->onHttpRequest("url  ",HttpRequest::Type::GET,httpresponse_selector(OneBody::onHttpRequestCompleted));