Windows ソケット : ストリーム ソケット

更新 : 2007 年 11 月

ここでは、ストリーム ソケットについて説明します。これは、2 種類ある Windows ソケットの 1 つです。もう 1 つは、データグラム ソケットです。

ストリーム ソケットは、レコード境界のないデータ フローであり、双方向に伝送できるバイト ストリーム用です。アプリケーションは全二重なので、ソケット経由で送受信できます。ストリームでは、シーケンスどおりに非重複データを送ることができます。"シーケンスどおり" とは、パケットが送出時の順番で配達されることです。"非重複" とは、各パケットが 1 回しか配達されないことです。ストリーム メッセージは必ず受信されるので、大量のデータを扱うときに向いています。

ネットワーク トランスポート層は、適切なサイズのパケットにデータを分解またはグループ化します。CSocket クラスがデータのパックとアンパックを行います。

ストリームは、明示的な接続をベースにしています。つまり、ソケット A がソケット B に対して接続を要求し、ソケット B がこの接続要求を受け入れるか拒否します。

電話の通話は、ストリームによく似ています。普通の状況では、話し手が話した内容は順序どおりに聞き手に届き、重複したり欠落したりすることはありません。ストリーム ソケットは、任意のサイズの ASCII ファイルまたはバイナリ ファイルを転送できるファイル転送プロトコル (FTP: File Transfer Protocol) などの実装に適しています。

データを必ず伝達しなければならない場合、またはデータのサイズが大きい場合は、データグラム ソケットではなく、ストリーム ソケットの使用をお勧めします。ストリーム ソケットの詳細については、Windows ソケットの仕様を参照してください。この仕様は Windows SDK にあります。

ストリーム ソケットを使用した場合、データグラム ソケットを使ってネットワーク上のすべての受信側ソケットにブロードキャストを行うようにデザインされたアプリケーションに比べて、次の点で優れています。

  • ブロードキャスト モデルでは、ネットワーク オーバーフローの問題が発生する可能性があります。

  • 後から採用されたクライアント サーバー モデルの方が、より効率的です。

  • データグラム モデルでは信頼性が低い場合でも、ストリーム モデルでは信頼性の高いデータ転送を行うことができます。

  • 最終的なモデルでは、Unicode と ANSI の両ソケット アプリケーション間の通信機能を CArchive クラスから CSocket クラスに流用できます。

    474e45z0.alert_note(ja-jp,VS.90).gifメモ :

    CSocket クラスを使う場合は、ストリームを使う必要があります。ソケット タイプを SOCK_DGRAM と指定すると、MFC のアサーションが失敗します。

参照

概念

MFC における Windows ソケット

Windows ソケット : 予備知識