クライアント/サーバーボイスチャットプログラム(アンマネージドC ++、win32)を実行しています。このプログラムでは、クライアントはTCPを使用してサーバーに接続し、テキストチャット/チャットルーム機能はTCPで実行され、すべての音声送信は別のUDP / RTPソケットを介して送信されます(APIを使用) JRTPLIBから)。
したがって、IPはTCP接続から認識され、接続が確立された後にRTPソケットのポート番号を送信できます。
問題は、TCPでは、接続を確立してから通信が双方向で機能するためにサーバーのみがポート転送を行う必要があるのに対し、UDPではrecvfrom()を使用する必要があることです。これはafaikでポートを開く必要があります。私が望まないクライアント側の最初の場所(そして、マルチプレイヤーゲームやVoIPクライアントを見る場合は必要ありません)
たとえば、UDPホールパンチングについて説明しているソース(たとえば、http://en.wikipedia.org/wiki/UDP_hole_punching)を読んで、サーバーとのudp会話の開始について言及し続けています。それが問題です-クライアントがポートを開かなくても、実際にサーバーとudp会話を(双方向で)開始するにはどうすればよいですか?TCPでは、前述したように、サーバーにconnect()するだけで、双方向の通信が可能です。
また、RTPはUDPに基づいて構築されていることは知っていますが、UDPとは異なるRTPホールパンチング(ここでもJRTPLIBを使用)について知っておくべきことは他にありますか?
前もって感謝します!