I am doing a client-server voice chat program(unmanaged C++,win32) in which clients connects to the server using TCP and textchat/chatroom functions are done in TCP while all audiotransmission is sent through a separate UDP/RTP socket (using the API from JRTPLIB).
So the IP is known from the TCP connection, and the port number of the RTP socket can be sent after connection is established.
The problem is that in TCP only the server needs to do port forwarding for communications to work both ways since you establish a connection, while in UDP you'd have to use recvfrom() -- which afaik needs the ports to be opened in the first place on the client side, which I do not want (and is not needed if you look at any multiplayer game or VoIP client)
Reading on sources that talk about UDP Hole Punching (for example http://en.wikipedia.org/wiki/UDP_hole_punching) for example they keep mentioning starting a udp conversation with the server. That's the thing - how do you actually start a udp conversation(both ways) with the server without the client having to open any ports? in TCP as I mentioned you just need to connect() to the server and communication is possible both ways.
Also -- I know RTP builds on UDP but is there anything else I should know about the RTP hole punching (again, using JRTPLIB) that makes it differ from UDP?
Thanks in advance!