7

ポートを転送するためにjavasbbiライブラリを使用しています。しかし、私のルーターは別のルーターに接続されているため、最初のルーターの外部IPは、2番目のルーターdhcpによって指定されたIPです。2番目のルーターのポートも転送する方法はありますか?これが私のコードです:

InternetGatewayDevice[] devices=InternetGatewayDevice.getDevices( 1000 );
System.out.println("Found "+devices.length+" Devices");
InternetGatewayDevice dev = devices[ 0 ];
System.out.println(dev);
System.out.println( "External IP = " + dev.getExternalIPAddress() );

System.out.println( dev.addPortMapping( "Streamternet", "TCP", null, 1333,
                                        "192.168.0.105", 8888, 0 ) );

System.out.println( "waiting for connection" );
HTTPServer.main(null);
4

2 に答える 2

4

@Danpe が回答で述べたように、複数の NAT の背後にいる場合、UPnP ではポートを開くことができません。

私は P2P ソフトウェアにも取り組んでいるので、私が集めたものから、2 つのピアを接続するために試みることができるものは次のとおりです。

  1. TCP または UDPホール パンチングを使用して接続します。
  2. 上記が機能しない場合は、いずれかの側のルーターの 1 つがSymmetric NATを使用しています。UPnP または NAT-PNP を試してください。
  3. 上記が機能しない場合は、アプリが UPnP、NAT-PNP をサポートしていないルーターの背後にあるか、複数のレベルの NAT の背後にいる可能性があります。次のいずれかを実行できます。

    1. これらのルーターでポートを開く必要があることをアプリのユーザーに伝えます。コメントで述べたように、これはユーザーの高度な技術知識を前提としているため、残念な解決策です。しかし、それは一部の企業が実際に行っていることのようです。たとえば、ここを参照してください。

    2. ポートが閉じているユーザーが通信するTURN プロトコルを使用するような中継サーバーを使用します。このリレー サーバーは、ポートが開いている 1 つまたは複数のピア (uTorrent の場合のように) である場合もあれば、サーバーである場合もあれば、2 つの組み合わせである場合もあります。ポートが開いているピアがある場合はそれらを使用し、そうでない場合は使用します。独自のサーバー (これは Skype の場合です)。

于 2013-10-27T17:37:07.027 に答える