cocos2d-xネットワークプログラミングについて説明する

まず、HTTPとソケットの概念的な理解についてお話します。

ソケットは通常「ソケット」と呼ばれ、IPアドレスとポートを記述するために使用されます。

ソケットのタイプは次のとおりです。

1>ストリーミングソケット:TCPプロトコルに基づいて、接続指向で信頼性の高いデータ転送サービス、データエラーのない繰り返し転送、および順番に受信を提供します。

2>データグラムスタイルのソケット:コネクションレスサービスを提供し、データは独立した形式で送信され、エラーのない保証は提供されません。また、UDPプロトコルに基づいて、接続シーケンスを乱す必要があります。

ソケットは、TCP / IPプロトコルのカプセル化とアプリケーションです。ソケット自体は、プロトコル自体ではなく、呼び出しインターフェイス(API)です。TPC/ IPプロトコルは、主にネットワークでのデータ転送方法を解決するトランスポート層プロトコルであるとも言えます。

HTTPプロトコルはハイパーテキスト転送プロトコルとも呼ばれます

HTTPは、コネクションレスでステートレスな接続アプリケーション層プロトコルであり、リクエスト/レスポンスで構成されています。標準のC / Sモデルであり、主にデータのパッケージ方法を解決します。

HTTP接続では、「要求/応答」メソッドを使用します。要求が行われたときに接続を確立する必要があるだけでなく、サーバーがデータに応答する前に、クライアントがサーバーに要求を送信することもできます。

HTTP接続とソケット接続

ソケット接続:サーバーは、2つのパーティが切断するまで、データをクライアントに直接送信できます。

HTTP接続:サーバーは、クライアントが要求を送信するまで待機してから、データをクライアントに送信する必要があります。クライアントは、サーバーに接続要求を定期的に送信します。オンラインのままであるだけでなく、サーバーに新しいデータがあるかどうかも「確認」します。使用可能な場合は、データをクライアントに送信します。

非常に多くの概念的なことについて話し合った後、これら2つの方法の具体的な使用法を見てみましょう。

まず、HTTPプロトコルの使用法を見てみましょう。

一般的に使用される2つのHTTP通信方法は、取得と送信です。これら2つの方法の類似点と相違点を見てみましょう。

1> getはサーバーからデータを取得(クエリ)することであり、postはサーバーにデータを送信(変更)することです。

2> getによって送信されるデータの量は少なく、2KBを超えることはできません。また、postによって送信されるデータの量は多く、これは一般に無制限と見なされます。

3> getのセキュリティは非常に低く、通常、Wiresharkのような強力なパケットキャプチャツールから逃れることはできませんが、実行効率は向上します; postのセキュリティは比較的優れています。

提案:データクエリを実行するときにgetメソッドを使用し、データを追加、変更、または削除するときにpostメソッドを使用します

デモは次のとおりです。

クラスで2つのメソッドを定義します。1つは要求で、もう1つは応答です。

メソッドの実現を見てください:

ここでは、getとpostのどちらを使用するかを区別するために2つのタグ値を使用しています。これら2つの方法の類似点と相違点を確認できます。

1> getメソッドはデータを直接URLの後ろに接続し、postメソッドはURLをデータから分離します

2>両方のメソッドがサーバーをリクエストした後、1つのメソッドをコールバックし、リクエストが成功したかどうかに関係なく、サーバーはJSON文字列を返します

このコールバックメソッドを見てみましょう。

サーバーから返されたJSON文字列を通じて、リクエストが成功したかどうかを判断できます。一般に、HTTPはリクエストとレスポンスのプロセスです。

ソケットでのTCPおよびUDPプログラミング

TCP接続フローチャート:

1>ソケット(socket)を作成する

ソケットソケット(int af、intタイプ、intプロトコル)

af:アドレスファミリを指定します(TCP、IP)プロトコルはAF_INETのみです。

type:ソケットのタイプ(ストリーミングまたはデータグラム)を指定します。

protocol:特定のアドレスファミリを持つプロトコル。0の場合、システムは自動的に適切なプロトコルを選択します。

ソケットの呼び出しが成功すると、新しいソケットソケットが返され、失敗するとエラーが返されます。

2>ローカルアドレス(バインド)でポートにソケットをバインドします

int bind(SOCKET s、const struct sockaddr FAR * name、int namelen)

s:バインドされるソケット。

name:sockaddrへのポインター変数であるソケットのローカルアドレス情報を指定します。

namelen:アドレス構造の長さを指定します。

3>ソケットを監視モードに設定して、クライアント要求を受信します(待機)

1

int listen(SOCKET s、int backlog)

s:監視するソケット。

バックログ:接続を待機するキューの最大長。

4>クライアント要求を待機し、要求があると、接続要求を受け入れ、この接続に対応する新しいソケットを返します(受け入れ)

ソケット受け入れ(SOCKET s、struct sockaddr FAR * addr、int FAR * addrlen)

s:監視されているソケット。

addr:接続されたエンティティのアドレス(接続されたクライアントのIPアドレスとポート情報)を受信するために使用されるバッファーへのポインター。

addrlen:アドレス情報の長さを含む整数へのポインター。

5>新しく生成されたソケットを使用してクライアントと通信する(送信/受信)

送信機能:

int send(SOCKET s、const char FAR * buf、int len、int flags)

s:確立されたソケット。

buf:転送されるデータを含むバッファを指します。

len:データの長さ。

フラグ:0

recv関数:

int recv(SOCKET s、char FAR * buf、int len、int flags)

s:接続が確立され、データを受信する準備ができているソケット

buf:受信したデータを保存します

len:バッファー長

フラグ:関数呼び出しの動作に影響を与える

6>別の顧客の要求を待ち続ける

7>ソケットを閉じます

おすすめ

転載: blog.csdn.net/qq_21743659/article/details/108616221