DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Directplay

環境/言語:[C#]
分類:[.NET]

DirectX managed with C#のDirectPlayを使って、簡単なP2Pパズルゲームをつくって、アドレスを指定してLANでは動きました。
が、インターネット上で試してみたら、ホスト検索から先に進みませんでした。
windowsの標準のfire wall等は切っていました。
ルーターがあるのでそのせいかもしれませんが、
ネット上でやるには具体的にどのような設定をしたらいいのでしょうか。
よろしくお願いします。
  • 題名: Re[1]: Directplay
  • 著者: smith
  • 日時: 2005/06/04 20:58:33
  • ID: 11116
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
■No11110に返信(kiddさんの記事)
> DirectX managed with C#のDirectPlayを使って、簡単なP2Pパズルゲームをつくって、アドレスを指定してLANでは動きました。
> が、インターネット上で試してみたら、ホスト検索から先に進みませんでした。
> windowsの標準のfire wall等は切っていました。
> ルーターがあるのでそのせいかもしれませんが、
> ネット上でやるには具体的にどのような設定をしたらいいのでしょうか。
> よろしくお願いします。

最近ではプロバイダからのレンタルモデムにもルータが内蔵されている場合が多く、
ほとんどの人がルータを使用していると思いますので、
P2Pアプリの場合作者がルータについて理解していないのは問題があると思います。
また、ルータを使用しているようなので危険性は低いですが、一応ファイアウォールは切らず、
使うポート、またはそのアプリだけ許可するようにしたほうが良いと思います。

ルータの設定方法はそれぞれのルータによって違うので普通は説明書に載っています。
初心者やルータ設定権限がない人でも使えるようにしたいのなら、
UPnPによりルータを自動設定するようなアプリにするか、
そのアプリ専用のサーバを作成して24時間運営するしかないと思います。
ただし、前者の場合、旧式のUPnP非対応のルータでは使用できません。
具体的には何番ポートをあければいいのでしょうか。

>
> 最近ではプロバイダからのレンタルモデムにもルータが内蔵されている場合が多く、
> ほとんどの人がルータを使用していると思いますので、
> P2Pアプリの場合作者がルータについて理解していないのは問題があると思います。
> また、ルータを使用しているようなので危険性は低いですが、一応ファイアウォールは切らず、
> 使うポート、またはそのアプリだけ許可するようにしたほうが良いと思います。
>
> ルータの設定方法はそれぞれのルータによって違うので普通は説明書に載っています。
> 初心者やルータ設定権限がない人でも使えるようにしたいのなら、
> UPnPによりルータを自動設定するようなアプリにするか、
> そのアプリ専用のサーバを作成して24時間運営するしかないと思います。
> ただし、前者の場合、旧式のUPnP非対応のルータでは使用できません。
  • 題名: Re[1]: Directplay
  • 著者: mor
  • 日時: 2005/06/05 1:42:22
  • ID: 11119
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
■No11110に返信(kiddさんの記事)
> インターネット上で試してみたら、ホスト検索から先に進みませんでした。

こんばんは。

ホスト検索とは具体的にどのようなことをされたのでしょうか?
先に進まないとはどのような現象でしょうか?
グローバルIPとかどうなっていますか?
DNSへの登録とかもされているのでしょうか?
  • 題名: Re[3]: Directplay
  • 著者: smith
  • 日時: 2005/06/05 5:43:48
  • ID: 11121
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> 具体的には何番ポートをあければいいのでしょうか。

アプリの作者が何番ポートを使うように作ったのかによって変わります。
そのアプリは自分で作ったんですよね?
morさんも言っているように「ホスト検索」などという何のことだか分からないような用語も出てきていますし、
雑誌か何かのサンプルプログラムを意味も分からずに動かしたりしていませんよね?
それはそれで勉強になるので良いのかもしれませんが、
質問者がプログラム全体の意味を分かっているのか分かっていないのかによって
コメントの仕方も変わってきますので、まずはその辺を明らかにしたほうが良いと思います。
いろいろすいません。
DirectPlayのサンプルプログラムを元につくりました。
プログラムの流れは理解しているつもりです。
が、LANとインターネットの違いもいまいち理解しておりません。
ホスト検索ってのは、DirectPlay.PeerのFindHostsメソッドのことを言っています。
ホストのPCのグローバルIPを指定して実行しました。
作ったときに何番ポートと指定した覚えはないのですが、デフォルトではどうなっているのでしょうか。


よろしくお願いします。
  • 題名: Re[3]: Directplay
  • 著者: mor
  • 日時: 2005/06/05 12:41:50
  • ID: 11123
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No11122に返信(kiddさんの記事)
> いろいろすいません。
> DirectPlayのサンプルプログラムを元につくりました。
> プログラムの流れは理解しているつもりです。
> が、LANとインターネットの違いもいまいち理解しておりません。
> ホスト検索ってのは、DirectPlay.PeerのFindHostsメソッドのことを言っています。
> ホストのPCのグローバルIPを指定して実行しました。
> 作ったときに何番ポートと指定した覚えはないのですが、デフォルトではどうなっているのでしょうか。
>
>
> よろしくお願いします。
>


この辺が参考になりますか。

http://www.google.co.jp/search?hl=ja&rls=GGLD%2CGGLD%3A2004-14%2CGGLD%3Aja&q=directplay+%E3%83%9D%E3%83%BC%E3%83%88+%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABIP&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
■No11122に返信(kiddさんの記事)
> 作ったときに何番ポートと指定した覚えはないのですが、デフォルトではどう
> なっているのでしょうか。

リファレンスを眺めただけですが、ホストの列挙に使用する DPNSVR のポート
(6073/udp)と、実際にホストが使用するポート(既定では 2302-2400/udp)の両
方を通す必要があるみたいです。

http://www.microsoft.com/japan/msdn/library/ja/directx9_c/directx/play/understand/networking/ports.asp
http://support.microsoft.com/default.aspx?scid=kb;ja;240429

ポート番号が既知の DPNSVR からホストのポート番号が取得できるため、LAN
内ではポート番号を意識する必要がなかったということでしょうか。
morさん、おおたさんありがとうございます。
指摘されたポートを開けてまずやってみたのですが、できませんでした。
なんでかとおもって、ルーターを通さずに、セキュリティソフトも切ってやってみたのですが同様でした。

プログラム側でなにか設定しないといけないのでしょうか。
もしくは、LAN専用になってるとか?(そんな設定あるのか。。)

uum,よろしくお願いします。
> 指摘されたポートを開けてまずやってみたのですが、できませんでした。

「指摘されたポート」とは、47624(DirectPlay)ですよね?

> なんでかとおもって、ルーターを通さずに、セキュリティソフトも切ってやってみたのですが同様でした。

「ルータを通さずに」とありますが、以前にも書いたように
ADSLなどでモデムにルータが内蔵されていたりもしませんよね?
ルータ内蔵の場合ルータを通さない通信は不可能です。
(一部ルータ機能を切ることができるモデムもありますが)

「セキュリティソフトも切って」とありますが、
設定画面などから正しくファイヤウォールを停止しましたよね?
最近のセキュリティソフトは結構厳重にできていて、
終了しただけでは機能が停止しないものも多く存在します。

試しに別のP2Pソフトで通信が行えるのか、
または.NET Framework内のSocketsクラスを使って
そのポートで通信が行えるのかを試してみたほうが良いと思います。
私はDirectPlayは使っていませんが、
Socketsクラスでの通信はルータのポート開放で成功していますので、
それでできなければ何らかのファイヤウォールなどの問題であるということが分かりますし、
それでできればプログラムやDirectPlayの問題であるということが特定できると思います。
  • 題名: Re[5]: Directplay
  • 著者: おおた
  • 日時: 2005/06/07 7:34:33
  • ID: 11150
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No11145に返信(kiddさんの記事)
> 指摘されたポートを開けてまずやってみたのですが、できませんでした。
> なんでかとおもって、ルーターを通さずに、セキュリティソフトも切ってやっ
> てみたのですが同様でした。

クライアント側の環境はどうなっていますか。列挙照会の応答パケットは
2302-2400/udp 宛てに届くのかもしれません。No11129 に参照を書いた「サポー
ト技術情報」の方を読むとそんな風に読めますよね。

kidd さんの所のルータには、NAPT やパケットフィルタリングのログを表示す
る機能はないのでしょうか。Try & Error で問題を絞り込むのは大変でしょう。

> もしくは、LAN専用になってるとか?(そんな設定あるのか。。)

ブロードキャストを使ってサブネット内のホストを列挙するという設定もある
みたいですよね。No11122 にホストのアドレスを指定して検索したと書かれて
いましたから、今回は関係なさそうですけど。
■No11149に返信(smithさんの記事)
> 「指摘されたポート」とは、47624(DirectPlay)ですよね?

No11129 に参照を書いた「サポート技術情報」の方を読むと、ホストの列挙に
47624/tcp を使うのは DirectX 7 方式で、DirectX 8 方式では 6073/udp を
使うように読めます。Managed DirectX は DirectX 9 の上で動いていますよ
ね。Managed DirectX の DirectPlay では DirectX 7 方式のプロトコルを使
うのでしょうか。

それとも、DirectX 9 方式のプロトコルも別にあって、再び 47624/tcp を使
うようになっているのでしょうか。
> 指摘されたポートを開けてまずやってみたのですが、できませんでした。
> なんでかとおもって、ルーターを通さずに、セキュリティソフトも切ってやってみたのですが同様でした。

問題の切り分けはできていますか?
・Directplayのアプリだけが繋がらない
 ->Directplayの書き方の問題
・対象のホストに対して接続できない
 ->ネットワークの問題
おおたさんがおっしゃるように、まずはルータのログなどを参照されてはいかがでしょうか?

ポートを開けても繋がらないとなると、ネットワーク自体の問題があるのではないでしょうか。
・プロバイダがそのような通信を許可していない
・プロキシで制限されている
・そもそものグローバルIPが間違っている
・etc..

どうしてもインターネット越しに繋がらないのであれば、(自分の管理できるマシンが対象になりますが)VPNを通してLANと同じ環境にしてしまうという方法もあります。
VPNのソフトとしては SoftEatherなどが有名です。
  • 題名: Re[7]: Directplay
  • 著者: smith
  • 日時: 2005/06/08 22:48:04
  • ID: 11192
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> No11129 に参照を書いた「サポート技術情報」の方を読むと、ホストの列挙に
> 47624/tcp を使うのは DirectX 7 方式で、DirectX 8 方式では 6073/udp を
> 使うように読めます。Managed DirectX は DirectX 9 の上で動いていますよ
> ね。Managed DirectX の DirectPlay では DirectX 7 方式のプロトコルを使
> うのでしょうか。
>
> それとも、DirectX 9 方式のプロトコルも別にあって、再び 47624/tcp を使
> うようになっているのでしょうか。

とりあえずLANでは通信できているとのことですので、結局どのポートを使っているのか、
LAN上で接続が確立している状態でnetstatコマンドにより
現在の全接続の通信相手とポートを表示してみるのも良いかもしれません。
その際、何かネットワークを使用する他のもの(メッセーンジャーなど)は
停止してから行ったほうが見分けやすいと思います。
  • 題名: Re[6]: Directplay
  • 著者: kidd
  • 日時: 2005/06/09 22:09:21
  • ID: 11207
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
モデムにルーターの機能はありません。 XPのfire wallは切っており、ノートンISは無効にしていました。
クアイアント側もルーターはなく、fire wallもきってもらっていました。

まず、LAN上でどのポートを使っているか調べてみたいと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板