ラップトップをサーバーとして使用し、いくつかのAndroidデバイスをクライアントとして使用します。サーバーはクライアントが接続を試みるまでポート(たとえば5902)でリッスンします)を使用して、より単純なクライアントサーバープログラムを作成しようとしています。 。スレッドがサーバー上に生成され、通信が行われます。
基本的にファイアウォールのないフレンドリーなラボ環境では、これは問題なく機能します。
自宅には、Motorola NVG510ルーターとそのデフォルトのファイアウォールを備えたAT&TU-Verseがあります。私の大まかな理解は、デバイスごとにファイアウォールでそのポートを開く必要があるということです。これは、NVG510がデバイスごとにポートを開くようになったためです。
ただし、複数のデバイスで同じポートを開こうとすると、ピンホールの競合エラーが発生します(これは、まさにそのように聞こえます。ポートを開くことはピンホールであり、2つのデバイスで同じポートを開くと競合が発生します)。
ホームルーターでやろうとしていることを行う方法はありますか?家でこのプロジェクトに取り組むのは素晴らしいことです。
(注:これは厳密にはネットワークの問題に関するものです。コアクライアント/サーバーソフトウェアは他の環境でも機能します。)
更新:良性のラボ環境では、各デバイスに独自のIPアドレスがあります。私のホームネットワークでは、ポート転送アドレス192.168.1.xに制限されていますが、これが主な違いだと思います。
ポートに入ってくるトラフィックをファイアウォールの背後にあるデバイスに転送します。すべて同じサービスを利用している場合は、「デバイスごとに」ポートを開く必要はありません。
それが公開サービスだったと想像してみてください。インターネット上のアクセスを希望する可能性のあるすべての人のためにポートを開く必要があると思いますか? :)
とにかく、NVG510の場合:NAT/Gamingの下に、「カスタムサービス」(名前、リッスンするポート、転送するプロトコル)を作成し、追加します。作成したばかりの新しいカスタムサービスを選択し、そのトラフィックを転送するサーバーのIPを入力する「ホスト型アプリケーション」。