この記事では、Windows ソケットの性質と目的について説明します。 記事においては、次の事項も含まれています。
Windows ソケット仕様では、Microsoft Windows 用のバイナリ互換ネットワーク プログラミング インターフェイスが定義されています。 Windows ソケットは、カリフォルニア大学バークレイ校のバークレイ ソフトウェアディストリビューション (BSD、リリース 4.3) の UNIX ソケットの実装に基づいています。 仕様には、BSD スタイルのソケット ルーチンと Windows 固有の拡張機能の両方が含まれています。 Windows ソケットを使用すると、アプリケーションは Windows ソケット API に準拠するすべてのネットワーク間で通信できます。 Win32 では、Windows ソケットはスレッド セーフを提供します。
多くのネットワーク ソフトウェア ベンダーは、伝送制御プロトコル/インターネット プロトコル (TCP/IP)、Xerox ネットワーク システム (XNS)、Digital Equipment Corporation の DECNet プロトコル、Novell Corporation のインターネット パケット交換/シーケンスパック交換 (IPX/SPX) などのネットワーク プロトコルで Windows ソケットをサポートしています。 現在の Windows ソケット仕様では TCP/IP のソケット抽象化が定義されていますが、すべてのネットワーク プロトコルは、Windows ソケットを実装するダイナミック リンク ライブラリ (DLL) の独自のバージョンを提供することで、Windows ソケットに準拠できます。 Windows ソケットを使用して記述された商用アプリケーションの例としては、X Windows サーバー、ターミナル エミュレーター、電子メール システムなどがあります。
注
Windows ソケットの目的は、基になるネットワークを抽象化して、そのネットワークに関する知識を持たないようにし、ソケットをサポートする任意のネットワークでアプリケーションを実行できるようにすることです。 したがって、このドキュメントでは、ネットワーク プロトコルの詳細については説明しません。
Microsoft Foundation クラス ライブラリ (MFC) は、2 つのクラスを提供することで、Windows ソケット API を使用したプログラミングをサポートしています。 これらのクラスの 1 つである CSocket
では、ネットワーク通信のプログラミングを簡略化するための高度な抽象化が提供されます。
Windows ソケットの仕様である Windows ソケット: Microsoft Windows の下のネットワーク コンピューティング用のオープン インターフェイス (現在バージョン 1.1) は、TCP/IP コミュニティの多数の個人や企業によってオープン ネットワーク標準として開発され、自由に使用できます。 ソケット プログラミング モデルでは、インターネット プロトコル スイートを使用して、現在 1 つの "通信ドメイン" がサポートされています。 この仕様は、Windows SDK で入手できます。
ヒント
ソケットはインターネット プロトコル スイートを使用するため、"情報高速道路" でのインターネット通信をサポートするアプリケーションに推奨されるルートです。
ソケットの定義
ソケットは通信エンドポイントであり、Windows ソケット アプリケーションがネットワーク経由でデータのパケットを送受信するオブジェクトです。 ソケットには型があり、実行中のプロセスに関連付けられています。また、名前を持つことができます。 現在、ソケットは通常、インターネット プロトコル スイートを使用する同じ "通信ドメイン" 内の他のソケットとのみデータを交換します。
どちらの種類のソケットも双方向です。双方向 (全二重) で通信できるデータ フローです。
次の 2 種類のソケットを使用できます。
ストリーム ソケット
ストリーム ソケットは、レコード境界のないデータ フロー (バイトストリーム) を提供します。 ストリームは配信され、正しくシーケンスされ、重複しない状態であることが保証されます。
データグラム ソケット
データグラム ソケットは、レコード指向のデータ フローをサポートします。このデータ フローは配信されるとは限らず、送信順になっていないことや重複していることがあります。
"Sequenced" は、パケットが送信された順序で配信されることを意味します。 "重複なし" とは、特定のパケットを 1 回だけ受け取ることを意味します。
注
XNS などの一部のネットワーク プロトコルでは、ストリームは、バイト ストリームではなくレコードのストリームとして、レコード指向にすることができます。 ただし、より一般的な TCP/IP プロトコルでは、ストリームはバイト ストリームです。 Windows ソケットは、基になるプロトコルに依存しない抽象化レベルを提供します。
これらの型と、その状況で使用するソケットの種類については、「 Windows ソケット: ストリーム ソケット と Windows ソケット: データグラム ソケット」を参照してください。
SOCKET データ型
各 MFC ソケット オブジェクトは、Windows ソケット オブジェクトへのハンドルをカプセル化します。 このハンドルのデータ型は SOCKET です。 SOCKET ハンドルは、ウィンドウのHWND
に似ています。 MFC ソケット クラスは、カプセル化されたハンドルに対する操作を提供します。
SOCKET データ型の詳細については、Windows SDK を参照してください。 「Windows ソケット」の「ソケットのデータ型とエラー値」を参照してください。
ソケットの使用
ソケットは、少なくとも 3 つの通信コンテキストで非常に便利です。
クライアント/サーバー モデル。
メッセージング アプリケーションなどのピアツーピア シナリオ。
受信側のアプリケーションがメッセージを関数呼び出しとして解釈することによって、リモート プロシージャ コール (RPC) を行います。
ヒント
MFC ソケットを使用する場合の理想的なケースは、通信の両端を記述する場合です。両端で MFC を使用します。 MFC 以外のアプリケーションと通信する場合のケースの管理方法など、このトピックの詳細については、「 Windows ソケット: バイト順序付け」を参照してください。
詳細については、「Windows ソケットの仕様: ntohs、 ntohl、 htons、 htonl」を参照してください。 また、次のトピックも参照してください。