2016-09-23 5 views
1

私は世界中のサーバにクライアントを接続する方法を知っています!サーバを使わずに2つのクライアントを接続する

チェックワークアウトへの迅速なコードにしたい場合は、このリンク: http://cs.lmu.edu/~ray/notes/javanetexamples/

私の質問は、「どのように私は、サーバーなしで2つのクライアントを接続することができますか?」であります

サーバはクライアントを聴くことができるかもしれませんが、接続したらサーバを取引から外してクライアントが直接話すことができます。

私のサーバーは米国、クライアントAはヨーロッパ、クライアントBはアジアにあります。クライアントは通常のユーザーで、アプリを実行して他のクライアントと接触するだけです。これは大陸間のピアツーピア接続を持つチームビューアのような類似の概念です。

また、私はサーバーに何も送信したくないことに注意してください。クライアント間でディーラーになることは望ましくありません。サーバーは常に新しい接続を待機し、クライアント間でデータをやりとりするのを妨げます。

私にこれを手伝ってください。 ありがとう

答えて

1

私はあなたの問題がクライアント(ネット上の典型的なマシンであることを前提としている)がよく知られているIPアドレスを持っていないと思っています。

2人のクライアントが話すには、そのうちの1人が効果的にサーバーになる必要があります。しかし、NATやファイアウォールのようなものは、典型的なマシンがインターネット上の他のマシンで利用可能なリスニングソケットを開くのを妨げるだけです。

問題は、サーバーがクライアントに接続し直した古いFTPプロトコルの「アクティブ」モードに少し似ています。このモードは、クライアントのIPアドレスに関するサーバの考え方がクライアントのプライベートネットワークのNATゲートウェイのIPアドレスである可能性が高く、クライアントのIPアドレスの考え方がプライベートになるため、現代の世界では使用するのが難しいネットワークIPアドレス。

+0

ええ、私はそれについて読んで、それは不可能だと思う。 しかし、私は2人のクライアントができるだけ速い方法でお互いに話すことができるのだろうか?私はちょうどサーバーを使用する場合、2つのオプションがあります。1:接続を有効にして、使用可能なソケットがなくなるようにします。2:彗星のような何かをしたいときはいつでも、サーバーにクエリを送信します。私はたくさんの接続を受け入れ、クライアントを特定してから、他のクライアントの最後のステータスで更新する必要があります。 どちらも重いです! – Soley

+0

@サリバンクライアントが技術に精通している場合、ポートフォワーディングを要求するだけで済みます。 – Kayaman

+0

このポート転送をAndroid、html5などで実行できますか?それとも、Javaに特有のものなのでしょうか?私は、クライアントがルータを変更したり、相手の設定を変更してお互いに接続できるようにしたくない。 – Soley

0

これはいくつかの実験を行ってhttp://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.htmlでした。

この場合、接続を維持しても、3kアクティブ接続では問題になりません。

しかし、私がローカルテストで見つけたのは、クライアント/サーバーの最悪の部分がリクエストを処理するのに必要な時間であるということです。

私はスレッドを使用していますが、スレッドの実行はプログラムのすべての部分を同時に実行できるようにするための偽のものです。それはプロセスのボトルネックであり、その部分のアルゴリズムを最適化する必要があります。

+0

これは答えのセクションにあるべきではありません。ご自身のご意見に合わせて質問を更新してください。 – Prabhu

+0

ああええ、私はそれが人々を気にさせるのではないかと恐れています。私がここで留意したのは、生き続けることができる接続の量です。私の主な質問は、どのようにクライアントを接続しておくことができるかということでした。 – Soley

関連する問題