DirectPlay DPNSVR アプリケーションの使い方
DirectPlay DPNSVR アプリケーションの使い方
Microsoft® Windows® では、インターネット プロトコル (IP) ポートまたは IPX (Internetwork Packet Exchange) ポートごとに許可されるのは 1 つのプロセスのみである。Windows では、複数のプロセスが 1 つのポートを共有することは許可されない。通信ホストとして機能するアプリケーションは、それぞれ異なるポートを使わなければならない。この制約により、特に実行中のゲームを列挙するような作業を行うときに、次のような考慮が必要になる。
- ポートの競合を避ける。他のアプリケーションと競合しないポートを選択する必要がある。
- 複数の通信ホストを単独システム上で管理する。ホストは、インスタンスごとに異なったポートを使わなければならない。一方、クライアント アプリケーションは、特定のホストが使っているポートを判断しなければならない。
- 既に使用中のポートを避ける。望ましいポートが使用中の場合は、別のポートを使えなければならない。
これらの問題に、DPNSVR アプリケーションは、列挙要求の転送サービスとして機能することによって対処する。アプリケーションは、ホストを開始するとき、使用中のポートを DPNSVR に知らせる。DPNSVR は、既知のポートで待機し、システム上のすべての Microsoft DirectPlay® ホストに列挙要求を転送する。列挙要求への応答には、ホストの接続先である実際のポート番号が含まれる。
次の図は、2 つのアクティブなホスト アプリケーションを実行中のコンピュータで、DPNSVR がリモート クライアントからの列挙クエリーを処理する方法を示している。
DPNSVR により、次の利点が得られる。
- 特定のシステムで実行されているゲームをすべて列挙する汎用列挙ルーチンを作成できる。
- DirectPlay を使ってホストのポートを選択できる。クライアント アプリケーションは、DPNSVR のサービスを使って既知のポートで実行中のゲームを列挙して、ホストの接続先である実際のポート番号が含まれた応答が得られる。
- アプリケーションが要求したポートを取得できない状況を考慮する必要がない。
- システムの他のアプリケーションとの競合について心配する必要がない。
多くのアプリケーションでは DPNSVR のサービスを使うが、DPNSVR を無効にしなければならない場合もある。その例を 2 つ示す。
- 使うべきポートを知っているが、コンピュータ上でそのアプリケーションのインスタンスが 1 つしか実行されない場合。
- プレーヤがセッションを列挙する能力を制限したい場合。DPNSVR を無効にすると、ホストの接続先であるポートを知っているプレーヤだけが、ホストを列挙できるようになる。
DPNSVR の使い方
サービス プロバイダが DPNSVR をサポートしているかどうかを判断するには、IDirectPlay8Peer、IDirectPlay8Client、または IDirectPlay8Server でサポートされる GetSPCaps メソッドを呼び出す。サービス プロバイダが DPNSVR をサポートしている場合、返される DPN_SP_CAPS 構造体の dwFlags メンバに DPNSPCAPS_SUPPORTSDPNSRV フラグが設定される。現時点では、IP サービス プロバイダ、IPX サービス プロバイダ、およびネットワーク シミュレータ サービス プロバイダだけが DPNSVR をサポートする。
注 ネットワーク シミュレータ サービス プロバイダを使って DPNSVR セッションのホストとなる場合、IP サービス プロバイダを使って DPNSVR セッションのホストとなることはできず、その逆も同様である。すべての DPNSVR セッションには IP サービス プロバイダかネットワーク シミュレータ サービス プロバイダを使う必要がある。IPX セッションや DPNSVR なしのセッションのホストとなる能力は影響を受けない。
DPNSVR はデフォルトで選択されているので、特別な操作をせずに使える。列挙要求をホストに転送したくない場合は、DPN_APPLICATION_DESC 構造体の dwFlags メンバに DPNSESSION_NODPNSVR フラグを設定して、DPNSVR を明示的に無効にする必要がある。DPNSVR には、さらに次のような特徴がある。
- DPNSVR にはウィンドウはないが、ユーザーのタスク リストには表示される。
- DPNSVR を使っているアプリケーションがない場合、その状態が 30 秒続くとシャットダウンする。DPNSVR は、アプリケーションがホスティングを開始すると自動的に起動する。
- コマンド ラインで「
DPNSVR /kill
」と入力すると、すぐにシャットダウンできる。しかし、DPNSVR をシャットダウンするときにホスト アプリケーションが開かれている場合、アプリケーションは DPNSVR ポートで列挙を受け取れなくなる。
注 DPNSESSION_NODPNSVR フラグが設定されていても、アプリケーションが使用中のポートを知っていれば、いつでもホストを列挙できる。