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

この記事では、使用可能な2つの Windows ソケットの種類のいずれかであるストリームソケットについて説明します。This article describes stream sockets, one of the two Windows Socket types available. (もう1つの型は データグラムソケットです)。(The other type is the datagram socket.)

ストリームソケットは、レコード境界のないデータフローを提供します。これは、双方向のバイトストリームです (アプリケーションは全二重で、ソケット経由で送受信することができます)。Stream sockets provide for a data flow without record boundaries: a stream of bytes that can be bidirectional (the application is full duplex: it can both transmit and receive through the socket). ストリームは、シーケンス処理された重複データを配信するために依存できます。Streams can be relied upon to deliver sequenced, unduplicated data. ("シーケンス処理された" とは、パケットが送信された順に配信されることを意味します。("Sequenced" means that packets are delivered in the order sent. "重複" とは、特定のパケットのみを取得することを意味します)。ストリームメッセージの受信は保証され、ストリームは大量のデータの処理に適しています。"Unduplicated" means that you get a particular packet only once.) Receipt of stream messages is guaranteed, and streams are well suited to handling large amounts of data.

ネットワークトランスポート層は、適切なサイズのパケットにデータを分割したり、データをグループ化したりする可能性があります。The network transport layer may break up or group data into packets of reasonable size. CSocketクラスは、パッキングと開梱を処理します。The CSocket class will handle the packing and unpacking for you.

ストリームは明示的な接続に基づいています。ソケット A はソケット B への接続を要求します。ソケット B は接続要求を受け入れたり拒否したりします。Streams are based on explicit connections: socket A requests a connection to socket B; socket B accepts or rejects the connection request.

電話では、ストリームとして優れたたとえることができます。A telephone call provides a good analogy for a stream. 通常の状況では、受信側のパーティは、重複や損失を発生させることなく、そのような順序で話すことを知らせます。Under normal circumstances, the receiving party hears what you say in the order that you say it, without duplication or loss. ストリームソケットは、たとえばファイル転送プロトコル (FTP) などの実装の場合に適しています。これにより、任意のサイズの ASCII またはバイナリファイルの転送が容易になります。Stream sockets are appropriate, for example, for implementations such as the File Transfer Protocol (FTP), which facilitates transferring ASCII or binary files of arbitrary size.

ストリームソケットは、データが到着することを保証する必要がある場合と、データサイズが大きい場合に、データグラムソケットに適しています。Stream sockets are preferable to datagram sockets when the data must be guaranteed to arrive and when data size is large. ストリームソケットの詳細については、「Windows Sockets specification」を参照してください。For more information about stream sockets, see the Windows Sockets specification. この仕様は、Windows SDK で使用できます。The specification is available in the Windows SDK.

ストリームソケットを使用すると、ネットワーク上のすべての受信ソケットにブロードキャストするためにデータグラムソケットを使用するように設計されたアプリケーションの方が優れています。Using stream sockets can be superior to applications designed to use a datagram socket for broadcasting to all receiving sockets on the network because

  • ブロードキャストモデルは、ネットワークフラッド (または "嵐") の問題の影響を受けます。The broadcast model is subject to network flood (or "storm") problems.

  • その後、クライアント/サーバーモデルを採用する方が効率的です。The client-server model adopted subsequently is more efficient.

  • ストリームモデルは信頼性の高いデータ転送を提供します。ここでは、データグラムモデルにはありません。The stream model supplies reliable data transfer, where the datagram model does not.

  • 最終的なモデルでは、クラスの型がクラスの CSocket に適した、Unicode と ANSI の両方のソケットアプリケーション間で通信を行う機能を利用しています。The final model takes advantage of the ability to communicate between Unicode and ANSI socket applications that class CArchive lends to class CSocket.


    クラスを使用する場合は CSocket 、ストリームを使用する必要があります。If you use class CSocket, you must use a stream. ソケットの種類を SOCK_DGRAM として指定した場合、MFC アサーションは失敗します。An MFC assertion fails if you specify the socket type as SOCK_DGRAM.

関連項目See also

MFC における Windows ソケットWindows Sockets in MFC
Windows ソケット:背景Windows Sockets: Background