1

私はネットワークに関連するプログラムに取り組んでおり、クライアントが LAN 内にあるサーバーに接続する必要がある状況があります。

私が知っているように、TCP 接続を確立するときは、サーバーがリッスンしているポートにクライアントがアクセスできる必要があります。サーバーが LAN 内にある場合、ポート アクセスはルーターによってブロックされます。私が知っている解決策の 1 つは、UPnP を使用してルーターでポート マッピングを実行することです。ただし、ルーターが UPnP をサポートしていない場合があります。他の解決策はありますか?

IM アプリケーションが思い浮かびました。多くの IM アプリケーションには、インターネットにアクセスできる限り、ネットワーク環境がどうであれ、ユーザーが相互にファイルを送信できる機能があります。パブリック サーバーが 2 つの間のファイル データ エクスチェンジャーとして使用されているとは思わないので、直接接続する必要があります。クライアントが「隠された」サーバーに接続できるようにするために、実際にはどのようにしているのでしょうか?

4

2 に答える 2

0

uPnPまたは開いているポートを一方の端またはもう一方の端で実行できない場合、残っている唯一のオプションは、中央のサーバーを介してそれを渡すことであるように見えます。

于 2012-10-25T12:15:29.567 に答える
0

通常、このようなプログラムは一連の手順を試みます。

  1. A は B に直接接続します
  2. B は A に直接接続します
  3. A は、ファイアウォール (uPnP) で転送されたポートを B に接続しようとします。
  4. B はファイアウォール (uPnP) で転送されたポートに接続しようとします。
  5. AとBの両方が中央サーバーに接続し、それを介してデータを交換します

プロバイダーはすべての同時転送を管理するのに十分なリソースを持っている必要があるため、最後のステップは明らかに最も好ましくありません。レート制限は一般的です。

とにかく IM は一元管理されているので、これらすべてを調整するのはそれほど難しくありません。

于 2012-10-25T13:27:26.313 に答える