1

クライアント同士を直接接続し、接続を維持することが不可欠なアプリケーションを作成しています。優れた技術 (Google) を使用していくつかの調査を行った後、NAT-Punching または NAT-Traversal を実行することで、必要なものを達成できることがわかりました。

ほとんどの人は UDP 経由で NAT-Punching を使用しているようですが、私の場合は TCP でこれを行う必要があり (これは事実です。誰かが「なぜ UDP ではないのですか?」と尋ねる前に)、サンプル コードが見つかりませんでした。これまたは少なくとも適切なチュートリアル。理論的な付属品がどこにあるかを見つけることができましたが、Sockets または TCPClients では何も見つかりませんでした (私はソケットの方が好きです)。

NAT の背後にある 2 つのクライアントを接続できるサンプル コードをリンクしてもらえますか、またはサンプル コードを使用した完全なチュートリアルにリンクしてもらえますか? この目標を .NET で実行するのは難しいことはわかっています (私は VB.NET を使用していますが、C# も読んで理解することができます) が、可能であるはずです。

UPnP はオプションではありません。これは、セキュリティ上の理由により一部の NAT が無効になっているためです。

4

1 に答える 1

1

raw ソケットにアクセスできない限り、TCP 経由で NAT パンチングを実行することはできません。それを機能させるには、シーケンス番号と TTL 値を使用していくつかの巧妙な操作を行う必要があります。ただし、Windows では、Raw ソケットを悪用して DDoS を伝播または実行するマルウェアの量が非常に多いため、XP SP2 以降のすべてのバージョンの Windows の非サーバー バージョンのオペレーティング システムでは、Raw Sockets は許可されていません。

次のいずれかを行います。

  1. UDP を使用し、不足しているパケットを再要求するコードを挿入するか、許容できる場合はコードをリファクタリングして、紛失したパケットを処理します。
  2. サーバーを仲介者として使用してストリーミングする
  3. 端の 1 つは生のソケットを作成できる必要があります。
于 2012-08-06T15:20:44.347 に答える