Установить связь с сервером если приложение находится за NAT

программы C++ сервер Сети socket

Ситуация следующая. Есть клиентское приложение которое должно общаться с удаленным сервером по TCP. Проблема следующая, если комп на котором стоит приложение подключен к внешнему IP то пакеты отправленные с сервера доходят отлично. Но вот если комп клиента стоит за роутером (или другим NAT устройством) то отправленный пакет скажем на IP 213.12.15.16 port 27030 принимает роутер и не передает целевому компу которому оно предназначалось т.к. у этой тачки внутренний IP сети.
Как можно обойти NAT. Как открыть соединение так что бы роутер понимал кому именно передавался пакет. Проброс портов на роутере не катит. т.к. приложение для многих пользователей и не будет возможности всем настроить роутеры.
Приложение пишется на С++. Общение с сервером через сокеты.
Ответы:
Если так или иначе они находятся в одной локалке, можно обращаться не по IP, а по имени компа в сети. Как вариант - поднять DNS-сервер.
а что поддерживать соединение нельзя чтоли?
Клиент должен инициировать подключение к серверу, а сервер отвечать в это соединение. А не наоборот.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.