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