Я создаю приложение, которое прослушивает соединения (сервер) из другого приложения (клиента) через TCP-соединение.Так что, если оба приложения находятся в одной сети, установить соединение будет легко.поэтому я пытаюсь добавить метод на сервер, чтобы пользователям не приходилось открывать порты на своих маршрутизаторах, чтобы приложение работало при использовании его через Интернет.поэтому позвольте мне показать вам несколько различных сценариев:
1) --------------------------------------------------- SCENARIO_1 -------------------------------------------------------------
сервер - это компьютер в доме.Этот компьютер подключен к маршрутизатору, а этот маршрутизатор подключен к Интернету.Клиент - это компьютер в офисе, который также имеет доступ к Интернету.
, чтобы этот сценарий работал, прежде чем я использовал для открытия портов на домашнем маршрутизаторе и перенаправления их на серверный компьютер.на клиенте мне просто нужно было указать правильный IP-адрес и тот же порт, чтобы установить соединение.
теперь я избегал открывать порты на домашнем маршрутизаторе по-настоящему крутой техникой:
сначала я добавляю эту ссылку:
затемЯ сообщаю маршрутизатору, какие порты я хочу перенаправить на мой компьютер (сервер):
NATUPNPLib.UPnPNATClass upnpnat;
NATUPNPLib.IStaticPortMappingCollection mappings;
public ServerExample()
{
InitializeComponent();
// server local IP address
mappings.Add(1300, "TCP", 1300, "192.168.0.120", true, "my server");
//.... etc
..
при этом я могу подключиться со своего офисного компьютера, предоставив порт 1300, IP-адрес WANсерверный компьютер, который является другим.(этот адрес можно найти по адресу: whatismyipaddress.com). ОХЛАЖДЕНИЕ - ЭТО ТО, ЧТО Я НЕ ДОЛЖЕН ДЕЛАТЬ ЛЮБОЙ КОНФИГУРАЦИИ НА МАРШРУТИКЕ !!!
2) ----------------------------------------------- SCENARIO_2 ----------------------------------------------
знаю, тут возникает моя проблема.Сервер находится в офисе.этот сервер подключен к маршрутизатору A, маршрутизатор A подключен к маршрутизатору B, а маршрутизатор B подключен к Интернету.В остальном этот пример похож на последний пример на сервере с дополнительным маршрутизатором между ними.а клиент где-то ещенам все равно, как настроена сеть на клиентском компьютере, если у него есть доступ к интернету.
способ, который я использовал для решения этой проблемы, заключался в пересылке пакетов с маршрутизатора x на серверный компьютер, а также перенаправлении трафика с порта x маршрутизатора B на ip-адрес маршрутизатора A. при настройке этой конфигурацииМне удалось установить соединение с клиентом при предоставлении IP-адреса WAN сервера.(IP-адрес, который отображается по адресу: whatismyipaddress.com при извлечении из сети офиса).
, поэтому было бы неплохо, если бы я мог избежать всей этой конфигурации на маршрутизаторах и сделать что-то похожее на:
public delegate void SomeDelegate(string parameters);
NATUPNPLib.UPnPNATClass upnpnat;
NATUPNPLib.IStaticPortMappingCollection mappings;
public ServerExample()
{
InitializeComponent();
// server local IP address
mappings.Add(1300, "TCP", 1300, "192.168.150.141", true, "my server");
mappings.Add(1300, "TCP", 1300, "another ip", true, "router's ip");
, поэтому я поиграл с этим и не смог заставить его работать.также было бы хорошо, если бы я мог выяснить, является ли подключение к серверу сценарием 1 с c # или сценарием 2 или, возможно, другим сценарием, чтобы пользователям, настраивающим сервер, не приходилось указывать всю эту информацию.Например, я уверен, что LimeWire делает нечто подобное.
Редактировать:
здесь показан сценарий 1:
, а здесь показан сценарий 2