次の方法で共有


DirectPlay DPNSVR アプリケーションの使い方

DirectPlay DPNSVR アプリケーションの使い方

Microsoft® Windows® では、インターネット プロトコル (IP) ポートまたは IPX (Internetwork Packet Exchange) ポートごとに許可されるのは 1 つのプロセスのみである。Windows では、複数のプロセスが 1 つのポートを共有することは許可されない。通信ホストとして機能するアプリケーションは、それぞれ異なるポートを使わなければならない。この制約により、特に実行中のゲームを列挙するような作業を行うときに、次のような考慮が必要になる。

  • ポートの競合を避ける。他のアプリケーションと競合しないポートを選択する必要がある。
  • 複数の通信ホストを単独システム上で管理する。ホストは、インスタンスごとに異なったポートを使わなければならない。一方、クライアント アプリケーションは、特定のホストが使っているポートを判断しなければならない。
  • 既に使用中のポートを避ける。望ましいポートが使用中の場合は、別のポートを使えなければならない。

これらの問題に、DPNSVR アプリケーションは、列挙要求の転送サービスとして機能することによって対処する。アプリケーションは、ホストを開始するとき、使用中のポートを DPNSVR に知らせる。DPNSVR は、既知のポートで待機し、システム上のすべての Microsoft DirectPlay® ホストに列挙要求を転送する。列挙要求への応答には、ホストの接続先である実際のポート番号が含まれる。

次の図は、2 つのアクティブなホスト アプリケーションを実行中のコンピュータで、DPNSVR がリモート クライアントからの列挙クエリーを処理する方法を示している。

DPNSVR による列挙クエリーの処理の図

DPNSVR により、次の利点が得られる。

  • 特定のシステムで実行されているゲームをすべて列挙する汎用列挙ルーチンを作成できる。
  • DirectPlay を使ってホストのポートを選択できる。クライアント アプリケーションは、DPNSVR のサービスを使って既知のポートで実行中のゲームを列挙して、ホストの接続先である実際のポート番号が含まれた応答が得られる。
  • アプリケーションが要求したポートを取得できない状況を考慮する必要がない。
  • システムの他のアプリケーションとの競合について心配する必要がない。

多くのアプリケーションでは DPNSVR のサービスを使うが、DPNSVR を無効にしなければならない場合もある。その例を 2 つ示す。

  • 使うべきポートを知っているが、コンピュータ上でそのアプリケーションのインスタンスが 1 つしか実行されない場合。
  • プレーヤがセッションを列挙する能力を制限したい場合。DPNSVR を無効にすると、ホストの接続先であるポートを知っているプレーヤだけが、ホストを列挙できるようになる。

DPNSVR の使い方

サービス プロバイダが DPNSVR をサポートしているかどうかを判断するには、IDirectPlay8PeerIDirectPlay8Client、または 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 フラグが設定されていても、アプリケーションが使用中のポートを知っていれば、いつでもホストを列挙できる。