我正在做一个客户端-服务器语音聊天程序(非托管 C++,win32),其中客户端使用 TCP 连接到服务器,文本聊天/聊天室功能在 TCP 中完成,而所有音频传输都通过单独的 UDP/RTP 套接字发送(使用 API来自 JRTPLIB)。
所以从TCP连接中知道IP,建立连接后就可以发送RTP套接字的端口号了。
问题是,在 TCP 中,自从您建立连接以来,只有服务器需要进行端口转发才能双向进行通信,而在 UDP 中,您必须使用 recvfrom() - afaik 需要在客户端的第一名,我不想要(如果您查看任何多人游戏或 VoIP 客户端,则不需要)
阅读有关 UDP Hole Punching 的资源(例如http://en.wikipedia.org/wiki/UDP_hole_punching),例如他们不断提到开始与服务器进行 udp 对话。就是这样 - 你如何在客户端不必打开任何端口的情况下实际与服务器启动 udp 对话(双向)?正如我所提到的,在 TCP 中,您只需要 connect() 到服务器,并且两种方式都可以进行通信。
另外——我知道 RTP 是基于 UDP 构建的,但是关于 RTP 打孔(再次使用 JRTPLIB),我还应该知道什么使其与 UDP 不同吗?
提前致谢!