Windows ソケット : ストリーム ソケット
更新 : 2007 年 11 月
ここでは、ストリーム ソケットについて説明します。これは、2 種類ある Windows ソケットの 1 つです。もう 1 つは、データグラム ソケットです。
ストリーム ソケットは、レコード境界のないデータ フローであり、双方向に伝送できるバイト ストリーム用です。アプリケーションは全二重なので、ソケット経由で送受信できます。ストリームでは、シーケンスどおりに非重複データを送ることができます。"シーケンスどおり" とは、パケットが送出時の順番で配達されることです。"非重複" とは、各パケットが 1 回しか配達されないことです。ストリーム メッセージは必ず受信されるので、大量のデータを扱うときに向いています。
ネットワーク トランスポート層は、適切なサイズのパケットにデータを分解またはグループ化します。CSocket クラスがデータのパックとアンパックを行います。
ストリームは、明示的な接続をベースにしています。つまり、ソケット A がソケット B に対して接続を要求し、ソケット B がこの接続要求を受け入れるか拒否します。
電話の通話は、ストリームによく似ています。普通の状況では、話し手が話した内容は順序どおりに聞き手に届き、重複したり欠落したりすることはありません。ストリーム ソケットは、任意のサイズの ASCII ファイルまたはバイナリ ファイルを転送できるファイル転送プロトコル (FTP: File Transfer Protocol) などの実装に適しています。
データを必ず伝達しなければならない場合、またはデータのサイズが大きい場合は、データグラム ソケットではなく、ストリーム ソケットの使用をお勧めします。ストリーム ソケットの詳細については、Windows ソケットの仕様を参照してください。この仕様は Windows SDK にあります。
ストリーム ソケットを使用した場合、データグラム ソケットを使ってネットワーク上のすべての受信側ソケットにブロードキャストを行うようにデザインされたアプリケーションに比べて、次の点で優れています。
ブロードキャスト モデルでは、ネットワーク オーバーフローの問題が発生する可能性があります。
後から採用されたクライアント サーバー モデルの方が、より効率的です。
データグラム モデルでは信頼性が低い場合でも、ストリーム モデルでは信頼性の高いデータ転送を行うことができます。
最終的なモデルでは、Unicode と ANSI の両ソケット アプリケーション間の通信機能を CArchive クラスから CSocket クラスに流用できます。
メモ : CSocket クラスを使う場合は、ストリームを使う必要があります。ソケット タイプを SOCK_DGRAM と指定すると、MFC のアサーションが失敗します。