2010-12-10 6 views
0

UDPがコネクションレスであっても、クライアントとサーバーの間に何らかの接続を確立したいと思います。 問題は、サーバーがクライアントから何かを受け取ったら、私の答えを送ることができるのは、クライアントからのIPとポートの使用だけです。クライアントとサーバーを接続する方法は?

また、クライアントがインターネット上にIPを持っていないため、ほとんどの場合、これはクライアントのIPではなく、ルータだけが行います。 彼はルータの後ろにいる場合でも、クライアントにデータを返信する方法を知りたいと思います。

私はそれが不可能だと考え始めています...しかし、それは可能でなければなりません:ビデオゲームは、クライアントからサーバーにデータを送信するためだけにUDPを使用していると教えてください!

+0

[UPnP](http://en.wikipedia.org/wiki/Universal_Plug_and_Play)のようなものを探しているようですね。 –

答えて

0

同じソケットを介してクライアントに返信するだけで、NATは自動的に解決し、実際のボックスに渡します。ファイアウォールの背後にあるUDPのための

+0

非常にシンプルなo_O! 私は実際には私といくつかの友人が疑問に思っていた:私たちのサーバーに接続された同じサブネットワークから2台のコンピュータを持っていると仮定して...サーバ側では、彼らは同じIPを持っており、 port:NATがどのサーバと通信しているのかをNATはどのように知るのでしょうか? サーバに何かを送った最後のコンピュータに送り返しますか?その場合、私たちは非常に慎重でなければ、クライアントに余分なパッケージを送るかもしれません。 もしそれがうまくいくと言えば、私はそれと一緒に行くことができます。しかし、私はそれについてのユーロです^^! –

+0

@ The-Snake:NATが行うことの一部は、発信パケットの発信元ポート番号をサーバーに変更することです。あなたのクライアントが両方とも同じポート番号でリッスンしていると思っても、サーバーは*異なる*ポート番号を表示します。 –

+0

私は考えていなかった、これは素晴らしいです!どうもありがとう ! –

2

オプション:

  1. 特定のマシンにUDPパケットを転送するファイアウォール/ NATの明示的なルール。
  2. 自動的に(クライアント側から)ルールを設定するUPnP
  3. UDPの自動復帰パス - ポートとIPアドレスを記憶し、UDPパケットの復帰ルールを作成します。
0

ルーターは、ルーターのポートからのものであるかのように見えるように発信データパケットを書き換えていることに気づきます。そのポートにUDPパケットアドレスを受信すると、「ああ、どこに送るのか知っています!元のデータが入ったネットワーク内部のポートに転送します。

通常、ルータは特定の時間のルートを記憶していて、そのポートで何も表示されない場合はルータを忘れてしまいます。

関連する問題