4

ソケットを使用して Java でネットワーク ゲームを作成しました。私のLAN経由のみを除いて、それはうまく機能します。:/ 私ができるようにしたいのは、自宅のコンピューターで実行されているサーバーを起動し、クライアント コードを実行可能 jar に入れて他の人に送信し、他の人がそれを起動して実行できるようにセットアップすることです。インターネット経由で接続します。でも...モデムとルーターをそのように設定する方法がわかりません。:( 私はワイヤレス クリア モデムを持っています。その構成ページは次のようになります。

http://imageshack.us/photo/my-images/254/mo​​dem.jpg

そして、ページが次のように見える Netgear ルーター:

http://imageshack.us/photo/my-images/443/routerq.jpg

現在、クライアントおよびサーバー ランナー クラスで、PC のプライベート IP アドレスを、選択したポート番号と共に ServerSocket および Socket オブジェクトに渡します。ソケットは、設定方法によってUDPまたはTCPのいずれかになる可能性があると聞きました...? 私はそのようなことはしませんが、それらをインスタンス化して 2 つの値を渡すだけです。

サーバーのコード:

ServerSocket sock = new ServerSocket();
sock.bind(new InetSocketAddress(IP, 9001));

クライアントのコード:

Socket sock = new Socket(IP, 9001);

また、ルーター/モデム設定の変更に応じてコードを変更する方法を知る必要があります。

「IP」は、コンピューターのプライベート IP である 192.168.1.10 を表す文字列であり、プログラムは、Socket と ServerSocket に渡す文字列である場合にのみ機能します。私が言ったように、私は自分のコンピュータに接続されたルーターに接続されたモデムを持っています。それで、誰かが私に(私は初心者なので詳細に)説明してもらえますか?

4

2 に答える 2

2

手動でポート転送するか、自動ポート転送用の UPnP や NAT-PMP などのソリューションを検討する必要があります。残念ながら、NAT は設定が面倒で、ほとんどのルーターは適切にサポートしていません。また、さまざまな実装とメカニズムの全範囲をサポートする必要があるため、単純な作業ではありません。

ただし、1 つのポートをマシンに転送するようにルーターを設定するのはそれほど難しくありません。ほぼすべてのルーターでそれを行う方法の素晴らしいリストについては、http://portforward.com/を参照してください。

于 2011-11-17T13:05:02.743 に答える
0

ここで多くの質問をしているようです...私はネットワーク/ソケットプログラミングのスペシャリストではありませんが、いくつかのアイデアがあります。

配布については、 JavaWebStartを調べることをお勧めします。これにより、クライアントがアプリを簡単に入手できるようになるだけでなく、更新が自動化されます。

このようなコンストラクターを使用している場合Socket、実際の実装はシステムのデフォルトになります。適切な実装でこのメソッドを呼び出すことにより、これをオーバーライドできます。SocketImplFactory

IPアドレスとポートについては...ポートにハードコードされた値を使用しても問題ありません。クライアントが接続するために、ポートまたは少なくともいくつかのデフォルトを決定する必要があります。それでも、外部構成ファイルから値を読み取ると便利な場合があります。これにより、他の人がサーバーを実行できるようにサーバーアプリを配布することにした場合に、簡単になります。別のポートを使用したい場合があります。

ただし、サーバーのIPアドレス(自分のもの)をコードにハードコーディングすることは間違いなくノーノーです。クライアントは、提供または構成ファイルで設定する必要のあるIPアドレスまたはホスト名のいずれかを使用して接続する必要があります。静的IPアドレスがない場合は、ホスト名が必要になります。

これがあなたや一部の友人にとって楽しいものであり、チャットセッションなどでIPとポートを提供することでいつでもゲームを開始できる場合を除いて、世話をしている会社で外部ホスティングソリューションを見つける方がよいでしょう。 DNS解決とネットワーク設定。最近では、Java EEサーバーやデータベースなどの要件がない場合、そのようなものはかなり安価に見つかります。

編集:何か他のことを考えました。TCPはユースケースとしては問題ないかもしれませんが、これが最小限のラグと迅速な入力同期を必要とするゲーム(シューティングゲームや格闘ゲームなど)の場合は、最良の選択ではありません。その場合、UDPの方が適しています。それは、非同期化のためのある種の検出またはドロップされたパケットを補うメカニズムを追加する必要性を引き起こします。

于 2011-11-17T13:22:00.400 に答える