クライアントがTCPを使用してサーバに接続し、テキストチャット/チャットルーム機能がTCPで実行され、すべての音声送信が送信されるクライアント/サーバ音声チャットプログラム(アンマネージドC++、win32)を実行しています。別のUDP/RTPソケット(JRTPLIBのAPIを使用)。C++ホールパンチングUDP(RTP)
したがって、IPはTCP接続から認識され、接続が確立された後にRTPソケットのポート番号を送信できます。
問題があるのは、接続を確立してからUDPがrecvfrom()を使用しなければならないのに対し、サーバはポートフォワーディングを両方の方法で行う必要があるということです。 (マルチプレイヤーゲームやVoIPクライアントを見ている場合は不要です)クライアント側の最初の場所で開くことができます。
UDPホールパンチングに関する話題(例:http://en.wikipedia.org/wiki/UDP_hole_punching)例えば、彼らはサーバとのudp会話を開始することについて言及し続けている。これは問題です。クライアントがポートを開かなくても、実際にサーバーとUDP通信(両方向)を開始するにはどうすればいいですか?私はあなたが()サーバーに接続する必要があると述べたTCPで、通信は両方の方法が可能です。
また、私はUDP上でRTPビルドを知っていますが、UDPとは異なるRTPホールパンチング(再び、JRTPLIBを使用)について知っておくべきことがありますか?
ありがとうございます!
私はちょっと混乱しています - UDPホールパンチングはNATトラバーサルのために行われます。つまり、ピアツーピアに接続する必要があり、両方のピアがプライベートネットワーク(またはルータ)として動作しています。サーバーは、2つのクライアントを「マッチメイキング」する方法としてのみ使用されます。それはあなたがやろうとしていることですか? – zebrabox
クライアントにポートを開かせずに、サーバーに接続しているクライアント間でUDP/RTP接続を実現しようとしています。私が理解しているように、クライアントはIP /ポートをサーバと交換し、クライアント間で共有して、互いに直接通信できるようにします。 – KaiserJohaan
「ポートを開く」とはどういう意味ですか?彼らが通信するために開かれた港がなければなりません、それはudpの穴あけがするものです。 – nos