Связь через WAN
Я хочу создать приложение клиент-сервер в C#, но не только в локальной сети. Там все просто: TcpListener, TcpClient и т. Д.
Я хочу сделать что-то вроде этого, например, на моем компе сервер, который ждет соединения. У кого-то в другой сети есть клиент. Он начинает соединение, но... где... что такое IP сервера? Он видит только ip роутера.
Есть идеи?:)
РЕДАКТИРОВАТЬ
Большая проблема также двойной NAT
3 ответа
Ваш вопрос не объясняет весь сценарий... но с моим пониманием проблемы я могу предложить следующий ответ: В зависимости от местоположения целевой клиентской базы (поддержка корпоративных сетей или НЕ), вы можете использовать различные варианты маршрутизации, такие как UPnP, STUNT или IPv6, или некоторые другие опции обхода NAT, чтобы вы могли информировать клиента о том, где находится слушатель. Всегда должен быть центральный сервер реестра, которому слушатель будет сообщать свое местонахождение и режим связи, разрешенный в его окружении. Использование сервера XMPP было бы простым вариантом для таких целей, что решает большинство таких проблем. Как только клиент запрашивает информацию о местонахождении слушателя с сервера обнаружения, он может напрямую подключиться к слушателю.
Вы по-прежнему используете один и тот же TcpListener и TcpClient (если хотите сделать его таким низким уровнем).
Технологии для связи по глобальной сети одинаковы для связи по локальной сети. Сложной частью является получение сетей между клиентом и сервером, чтобы позволить вам использовать необходимые порты и протоколы.
Похоже, вы просто хотите настроить переадресацию портов на вашем маршрутизаторе. Когда входящее соединение установлено на конкретном порту, к которому подключается клиент, маршрутизатор должен перенаправить соединение на компьютер, который вы указали в локальной сети. (Обычно IP, как 192.168.xx). Это также должен быть IP-адрес, на котором ваш TcpListener прослушивает соединения.
Вы можете попробовать http://portforward.com/, если вам нужна помощь в настройке конкретного маршрутизатора.