2016-10-04 7 views
2

別のルータに接続されたコンピュータから私の家の1台のコンピュータでServerSocketに接続しようとしています。私は何時間もグーグルを探していて、すでにポートフォワーディングを設定しています。私はすでに私のパブリックIPアドレスとポート番号でソケットを作成しようとしましたが、成功しませんでした。私の質問は、私のパブリックIPアドレス、サーバーのローカルIPアドレス、ポート番号を知っているので、サーバーに正しく接続するためにソケットを作成するにはどうすればいいですか?別のルータのクライアントからサーバに接続する

これらは、しかし、誰成功し、私が試してみましたコンストラクタです:事前に

new Socket(my_public_ip_address, port); 
new Socket(my_local_ip_address, port); <- this one works only if both computers are connected to the same router 

ありがとう!

+0

1.エラー出力/スタックトレースを追加できますか? 2.パブリックIPで表示されたネットワーク内のクライアントコンピュータ(パブリックルータ→クライアントとパブリックルータ→第2のルータ→サーバ)ですか?内部ネットワークからのパブリックIPを使ってルータのパブリックインターフェイスに接続することができない場合があります。あなたはサーバーの内部IPまたは第2のルータの "パブリック" IPに直接接続しようとするかもしれません。 – Konrad

+0

ここでの問題は、ほぼ確実にルータでNATを使用しているため、エンドツーエンドの接続を行うことができなくなります。 Javaコードはそれとは関係ありません。着信接続を許可するようにルータを設定する必要があります。スーパーユーザーはそのためのより有用なサイトかもしれません。 – chrylis

+0

あなたのクイック返信をお寄せいただきありがとうございます、私は明日あなたの提案をすべて試してみるでしょう! – andyfed

答えて

0

まず、あなたが不運な場合(私のような)あなたのサーバーコンピュータへの接続を構築することはできません。 (私の場合、大学のネットワークはすべての着信接続をブロックします)。

あなたのサーバーは問題ではなく、ルータへのパス(接続)です。

あなたのケースでは、私はまずあなたのクライアントから始まるあなたのサーバーをTracerouteしようとします。 Tracerouteは、少なくともあなたのルータに到達する必要があります。 (私は私が間違っていた場合にそうplsは、私を修正して、コンピュータネットワークとダメよん)

0

のは

  • のPC XがlocalipXとpublicipX
  • PC YとrouterXに接続されているが、localipYを持っており、接続しているとしましょうpublicipY

とrouterYには、次の操作を行う必要があります:

  1. 要求を作ります特定のポート(P)のXからpublicipYへ
  2. あなたのルーターYでポートPからのすべての要求をリダイレクトするように設定すると、localipX to portX(Xアプリケーションがリッスンしているポート)に送信されます。

ポートフォワーディングなどを行ったとお伝えしましたが、上記の手順を確認してください。それでも問題が解決しない場合は、ファイアウォールを確認して、使用されているすべてのポートが開いていることを確認し、接続されているすべてのノードを調べます(Xは要求を送信し、publicipXは要求を送信し、取得してYを取得します)。

関連する問題