Stuntman — это STUN-сервер, поддерживающий TCP STUN.
www.stunprotocol.org
На этом сайте есть несколько ссылок на примеры кода, включая реализации C# для клиентских библиотек. Большинство из них предназначены для UDP, но, немного поработав, вы можете создать свой собственный код C# для TCP STUN, изменив одну из существующих баз кода UDP.
После этого вам все равно нужно будет внедрить службу сигнализации для обмена адресами-кандидатами (полученными напрямую или через STUN) и выполнять собственные проверки подключения, подобные ICE.
Для TCP простое решение состоит в том, чтобы обе конечные точки использовали два сокета. Один сокет или прослушивание, а другой для подключения, но оба используют один и тот же локальный порт (опция сокета аля SO_REUSEADDR).
Другое решение состоит в том, чтобы каждая конечная точка использовала только один сокет. Обе конечные точки неоднократно пытаются выполнить одновременное TCP-подключение. Если NAT ведет себя хорошо, соединение может быть установлено.
Обход NAT, особенно обход TCP NAT, не является точной наукой. Всегда будут случаи, когда две конечные точки не могут подключиться напрямую, и им придется либо вернуться к UDP, либо использовать решение ретрансляции, такое как TURN.
Объедините всю приведенную выше информацию с ответом, который я написал в прошлом году о базовом обходе P2P/NAT здесь а>.
person
selbie
schedule
01.11.2013