次の方法で共有


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

この記事では、使用可能な 2 つの Windows ソケットの種類の 1 つであるストリーム ソケットについて説明します (もう 1 つの種類は、データグラム ソケットです)。

ストリーム ソケットは、レコード境界のないデータ フローを提供します。これは、双方向のバイト ストリームです (アプリケーションは全二重であり、ソケット経由で送受信ができます)。 ストリームは、シーケンス化された非重複データの配信に使用できます ("Sequenced" とは、パケットが送信された順序で配信されることを意味します。"重複なし" とは、特定のパケットを 1 回だけ取得することを意味します)。ストリーム メッセージの受信が保証され、ストリームは大量のデータの処理に適しています。

ネットワーク トランスポート層は、データを適度なサイズのパケットに分割したりグループ化したりする場合があります。 CSocket クラスは、パックとアンパックを自動的に処理します。

ストリームは、明示的な接続に基づいています。ソケット A はソケット B への接続を要求し、ソケット B は接続要求を受け入れたり拒否したりします。

電話は、ストリームの比喩として適しています。 通常の状況では、受信側は送信側が言ったことを言われた順序で聞き、重複や損失は発生しません。 ストリーム ソケットは、たとえばファイル転送プロトコル (FTP) などの実装に適しています。これにより、任意のサイズの ASCII またはバイナリ ファイルの転送が容易になります。

ストリーム ソケットは、データの到着が保証される必要がある場合と、データ サイズが大きい場合に、データグラム ソケットよりも適しています。 ストリーム ソケットの詳細については、Windows ソケットの仕様を参照してください。 仕様は Windows SDK で入手できます。

ストリーム ソケットを使用する方が、ネットワーク上のすべての受信ソケットへのブロードキャストのためにデータグラム ソケットを使用するように設計されているアプリケーションよりも優れている場合があります。理由は、次のとおりです

  • ブロードキャスト モデルでは、ネットワーク フラッド (または "ストーム") 問題が発生する可能性があります。

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

  • ストリーム モデルは、信頼性の高いデータ転送を提供しますが、データグラム モデルはそうではありません。

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

    Note

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

関連項目

MFC における Windows ソケット
Windows ソケット: 予備知識