まず、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>ソケットを閉じます