0

私は、インターネットを介した TCP 接続を含む学校のプログラミング プロジェクトを扱っています。クライアントでポート転送を使用できません! 中継サーバーが機能します。たとえば、クライアント A がクライアント B に接続してデータを送信する代わりに、両方とも WAN に対して開いているポートを持つサーバーに接続し、A がサーバーにデータを送信し、サーバーはデータを B に送信します。プロセスを複雑にします。

一般的に、これを行うにはどうすればよいですか?クライアントに直接通信させるためのトリックはありますか、それとも中継サーバーが必要ですか? iChat はクライアント間でオーディオ/ビデオ チャットを直接行うと思っていましたが、ポート フォワーディングや NAT-PMP/UPnP は関係ないようです。

念のため、このプロジェクトでは Objective-C を使用し、最後のプロジェクトでは Java を使用しています。どちらも Mac 上で実行されています。

4

1 に答える 1

0

質問は非常に広いですが、一般に、アプリケーションはピアに接続できるようにピアのアドレスを知っている必要があります。間に NAT またはファイアウォールを実行しているルーターがあると、事態はかなり複雑になります (最近ではほとんどどこでもそうです。セキュリティの観点からすると、通常、ネットワーク外の他のユーザーが PC に到達できないのは良いことです。 )。

したがって、最初のステップは、どこに接続するかを理解することです。接続する必要があるピアがファイアウォールまたは NAT の背後にない場合は、それに DNS レコードを割り当てることができ、ホスト名を介して到達できます。DNS レコードの存続可能時間は短いため、動的アドレスは問題になりません。レジストリとして機能するサーバーを使用することもできます。クライアントは現在のアドレスをレジストリに登録し、現在登録されているクライアント アドレスを照会することもできます。

ピアの 1 つが NAT/パケット フィルタ ファイアウォールの背後にある場合でも、そのデバイスから他のデバイスに接続できますが、そのように制限されることはありません。

両方のデバイスが制限されている場合、またはどちらか一方から接続を開始できるようにしたい場合は、中間サーバーが必要です。または、ファイアウォールを「パンチ」するか、ルーターに着信を転送するように依頼する必要があります。デバイスへの接続。NAT-PMP または UPnP がこれを行います。

さらに高度なテクニックもあります。

IPv4 を使用していると仮定します。IPv6 には NAT の問題はありませんが、ファイアウォールは IPv6 でも一般的に使用されています。

于 2013-09-27T20:10:28.193 に答える