次の方法で共有


Windows ソケット : 予備知識

更新 : 2007 年 11 月

ここでは、Windows ソケットの性質と用途について説明します。以下の内容についても説明します。

  • ソケットの定義

  • SOCKET データ型

  • ソケットの用途

Windows ソケットの仕様では、Microsoft Windows 用にバイナリ対応ネットワーク プログラミング インターフェイスが定義されています。Windows ソケットはカリフォルニア大学バークレー校で開発された Berkeley Software Distribution (BSD 4.3) 版の UNIX ソケットをベースにしています。この仕様には、BSD スタイルのソケットと、Windows 固有の拡張機能が規定されています。Windows ソケットを使うと、Windows ソケット API に準拠したあらゆるネットワークを経由してアプリケーション間で通信できます。Win32 では、Windows ソケットによってスレッドの安全性が保証されます。

多くのネットワーク ソフトウェアの販売元は、伝送制御プロトコル/インターネット プロトコル (TCP/IP)、Xerox ネットワーク システム (XNS)、Digital Equipment 社の DECNet プロトコル、Novell 社のインターネット パケット交換/順次編成パック交換 (IPX/SPX) などのネットワーク プロトコルに準拠した Windows ソケットをサポートしています。現在の Windows ソケット仕様で定義されているソケットの抽象化は TCP/IP 用ですが、どのネットワーク プロトコルでも Windows ソケットを実装した独自のダイナミック リンク ライブラリ (DLL: Dynamic Link Library) を用意するだけで、Windows ソケット準拠になります。Windows ソケットを使って記述されている商用アプリケーションの例として、X Windows サーバー、端末エミュレータ、電子メール システムがあります。

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

Windows ソケットの目的は、基盤になっているネットワークを意識させないことです。つまり、ネットワークについて詳しく知らなくても、ソケットをサポートするネットワークならば、どのネットワーク上でもアプリケーションを実行できます。したがって、この資料では、ネットワーク プロトコルの詳細については説明しません。

MFC (Microsoft Foundation Class) ライブラリは、Windows ソケット API を使ったプログラムをサポートするために、2 つのクラスを提供しています。1 つは高度な抽象化を行う CSocket であり、ネットワーク通信のプログラミングを単純化します。

Windows ソケットの仕様では、Windows ソケットは Microsoft Windows におけるネットワーク コンピューティング用のオープン インターフェイスであると定義されています。現在の Version 1.10 は、TCP/IP コミュニティに所属する個人と会社の大規模なグループによってオープン ネットワーキング規格として策定されたものであり、自由に利用できます。現時点のソケット プログラミング モデルは、インターネット プロトコル スイートを使って、単一の "通信ドメイン" をサポートします。この仕様は Windows SDK にあります。

z4eykh88.alert_note(ja-jp,VS.90).gifヒント :

ソケットはインターネット プロトコル スイートを使用するため、"情報ハイウェイ" でインターネット通信をサポートするアプリケーションにとって最適な手段といえます。

ソケットの定義

ソケットは通信のエンドポイントです。つまり、Windows ソケット アプリケーションは、このオブジェクトをとおしてネットワーク経由のデータ パケット交換を行います。ソケットには型があり、実行プロセスと対応付けられます。名前を付けることもできます。現時点では、ソケットの通信相手は同一の "通信ドメイン" 内にあり、インターネット プロトコル スイートを使う別のソケットに限られます。

ソケットには 2 種類ありますが、両方とも双方向ソケットです。つまり、両方向同時に通信できるデータ フローです (全二重)。

次の 2 種類のソケットがあります。

  • ストリーム ソケット

    ストリーム ソケットは、レコード境界のないデータ フロー、つまりバイト ストリーム用です。ストリームの受け渡しおよびその正しいシーケンスは保証されており、重複することはありません。

  • データグラム ソケット

    データグラム ソケットは、レコード単位のデータ フローをサポートします。しかし、このデータ フローの受け渡しは保証されません。したがって、シーケンスや非重複は保証されません。

"シーケンスが守られる" とは、パケットが送出時の順番で配達されることです。"非重複" とは、各パケットが 1 回しか配達されないことです。

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

XNS などの一部のネットワーク プロトコルでは、レコードをバイト ストリームではなく、レコード単位のストリームにできます。ただし、最も一般的な TCP/IP プロトコルでは、ストリームはバイト ストリームです。Windows ソケットでは、基盤となるプロトコルに依存しない抽象化レベルが提供されます。

ソケットの種類および用途については、「Windows ソケット : ストリーム ソケット」および「Windows ソケット : データグラム ソケット」を参照してください。

SOCKET データ型

MFC の各ソケット オブジェクトには、Windows ソケット オブジェクトへのハンドルがカプセル化されています。ハンドルのデータ型は SOCKET です。SOCKET ハンドルは、Windows の HWND に似ています。MFC のソケット クラスでは、カプセル化されたハンドルを操作できます。

SOCKET データ型については、Windows SDK で詳しく説明されています。「Windows Sockets」の「Socket Data Type and Error Values」を参照してください。

ソケットの用途

ソケットは、少なくとも次の 3 つの通信コンテキストで使用できます。

  • クライアント サーバー モデル

  • ピアツーピア シナリオ (チャット アプリケーションなど)

  • リモート プロシージャ コール (RPC)。受信側アプリケーションにメッセージを関数呼び出しとして解釈させます。

z4eykh88.alert_note(ja-jp,VS.90).gifヒント :

MFC ソケットの理想的な使い方は、通信の両端を自分で作成し、両端に MFC を使う場合です。非 MFC アプリケーションとの通信時の管理方法など、このトピックの詳細については、「Windows ソケット : バイトの順序付け」を参照してください。

詳細については、Windows ソケットの仕様で ntohsntohlhtonshtonl を参照してください。また、次のトピックも参照してください。

参照

概念

MFC における Windows ソケット