質問や問題があります。2台のAndroidフォン間でp2p接続を確立しようとしています。各電話をサーバーに接続し、プライベート(192.168.1.1)とパブリック(76.123.288.22)のIPと、サーバーに接続するポートを取得します。電話がサーバーに接続して特定のポートでサーバーソケットを開くときに応答を送信します。他の電話にもオープンソケットのパブリックIPとポートを送信しましたが、接続されません。私はここで複数のスレッドを読みましたが、電話またはコンピューターの両方が2つの異なるルーターの背後にある場合、p2p接続を行うことはできません。私の質問は、それが本当かどうかです。もしそうなら、LogMeInまたは他のp2pアプリケーションは異なるルーターの背後でどのように機能しますか?プログラミングエラーですか、それともネットワークアーキテクチャで許可されていませんか?
2 に答える
これを達成するためのいくつかのテクニックがあります-いくつか例を挙げると、 STUN、TURN、ICEです。あなたはそれらのそれぞれについて読むことができ、skype、gtalk(現在はグーグルトーク2018年3月)などのソフトウェアはとりわけこれらの技術を使用しています。
しかし、ここで理解する主な概念は、
あなたはそれに接続できるように公的に到達可能なIPが必要です。プライベートネットワーク上のルーターの背後にある場合は、ルーターのポート転送が必要です。つまり、特定のポートで受信したトラフィックをルーターの背後にあるサーバーに転送するルールをルーターに追加する必要があります。上記の手法は、ある程度、暗黙的に、または外部のサードパーティサーバーを関与させることによってこれを実現します。
最初に接続されているマシンで着信接続を許可する必要があります。通常、WindowsまたはLinuxファイアウォールは、例外が追加されない限り、すべての着信接続をブロックします。これはおそらく両方のノードで必要になります。
最後の部分では、Androidでプログラミングしないので、着信接続などのルールを追加できるかどうかはわかりません。しかし、gtalkにはAndroid用のクライアントがあり、gtalkはXMPPを使用しており、内部で任意の手法を使用できます。私は上で指摘しました。だから、Android携帯でそれができない理由を信じる理由はありません。
さらに便利なリファレンスを追加します。
libjingle(2018年3月にリンクを更新)は、テキスト、オーディオ、ビデオなどのp2pアプリケーションの作成に使用できるgoogleのオープンソースライブラリです。
こちらもAndroid用にコンパイルされているようです
「私の質問は、それが本当かどうかです。もしそうなら、LogMeInまたは他のp2pアプリケーションは異なるルーターの背後でどのように機能しますか?」
ここでの違いは、両方のマシンの接続が中央サーバーを経由し続けることです。これらは相互に直接接続しません(特別な場合を除く)。
設計上、やりたいことは機能しません。TCPがそれを行うことができれば、誰でも誰にでも接続できます。
中央サーバーに、一方の電話からのトラフィックをもう一方の電話がサーバーと行った接続に渡すようにする必要があります。
または、VPNを設定するか、Google Chromeを使用して電話をかけます(名前が変更されている可能性があります)。これは、ネットワークトポロジに関係なく、電話に小さなメッセージを送信する手段です。