Я выполняю программу голосового чата клиент-сервер (неуправляемый C ++, win32), в которой клиенты подключаются к серверу с помощью TCP, а функции textchat / chatroom выполняются в TCP, а вся аудиотрансмиссия отправляется через отдельный сокет UDP / RTP ( используя API из JRTPLIB).
Таким образом, IP известен из соединения TCP, и номер порта сокета RTP может быть отправлен после установления соединения.
Проблема заключается в том, что в TCP только сервер должен выполнять переадресацию портов для связи, чтобы работать в обоих направлениях, поскольку вы устанавливаете соединение, в то время как в UDP вам придется использовать recvfrom () - для этого нужно, чтобы порты были открывается в первую очередь на стороне клиента, чего я не хочу (и не нужен, если вы смотрите на любую многопользовательскую игру или VoIP-клиент)
Чтение по источникам, которые говорят об UDP Hole Punching (например, http://en.wikipedia.org/wiki/UDP_hole_punching), например, они постоянно упоминают о начале разговора udp с сервером. В том-то и дело, как вы фактически начинаете разговор udp (в обоих направлениях) с сервером, когда клиенту не нужно открывать какие-либо порты? В TCP, как я уже говорил, вам просто нужно подключиться () к серверу, и связь возможна в обоих направлениях.
Кроме того, я знаю, что RTP строится на UDP, но есть ли что-то еще, что я должен знать о пробивании дырок в RTP (опять же, с использованием JRTPLIB), что отличает его от UDP?
Заранее спасибо!