3

私はボイスチャットアプリをプログラミングしていますが、問題はクライアントがルーターファイアウォールブロック接続を使用している場合です

私はtcp接続でこの問題を解決しましたが、udp接続でこの問題を解決する方法がわかりませんでした

このステップでUDPホールを試してみます

  1. クライアントAは(サーバー)IPとユーザー名に送信します
  2. クライアントBは(サーバー)IPとユーザー名に送信します
  3. (サーバー)クライアントBに送信クライアントA情報—ボイスチャットを開始します
  4. (サーバー)クライアントAに送信クライアントB情報—ボイスチャットを開始します

しかし、これは一度は機能し、何度も機能しませんでした。理由はわかりません。どんな助けでも。

4

2 に答える 2

3

NAT パンチスルーには、外部の「マッチメイキング」サーバーが必要であり、すべての非対称ルーターとファイアウォールで可能です。簡単に言えば、これらの「対称」ルーターは、宛先のIPまたはポートを変更するたびにデータの送信/受信ポートを変更し、サーバーが行おうとしている「一致」を効果的に無効にします.

パンチスルーを行う「狡猾な」方法は他にもありますが、それらには一貫性がありません。

NAT タイプの違い (非対称、対称、フル コーン、制限付きコーン、ポート制限付きコーン) について読むことをお勧めします。また、クライアントが背後で動作しているNATのタイプを特定できるSTUNについても必ず読んでください。最後に、UPnP について読む必要があります。UPnP はほとんどのルーターに搭載されており、ユーザーがルーター インターフェイスを介して手動で行う必要なく、プログラムが自己登録してポートを開くことができます。

于 2013-01-06T14:43:43.843 に答える
3

あなたがしようとしているのはUDPホールパンチングです。しかし、シンメトリック NAT を備えた少数のルーターでは、ホール パンチは非常に難しく、一貫性がありません (可能な場合)。ウィキペディアでさまざまな NAT について読むと、より多くの洞察が得られます。

于 2012-11-13T06:22:40.897 に答える