cococos 2 dxネットワークプログラミングhttp,udp,tcp,socketについて
7385 ワード
まず概念を学ぶ
剣を持って天を測るブログから来ました。
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、
剣を持って天を測るブログから来ました。
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));