
У меня есть два компьютера. На одном из них запущен сервер, на другом — приложение, которое взаимодействует с этим сервером. Эти компьютеры развернуты на разных сайтах. Иногда эти компьютеры можно соединить напрямую, в других случаях они будут подключены только через беспроводное соединение, которое я не контролирую. В качестве дополнительного требования сервер также должен иметь возможность доступа к Интернету с помощью DHCP, если соединение доступно. Цель состоит в том, чтобы иметь возможность настроить эти компьютеры в офисе, а затем развернуть их на сайте практически без настройки на месте.
Что я могу сделать, чтобы компьютер, на котором запущено приложение, всегда (или в максимально возможном количестве случаев) мог найти сервер и взаимодействовать с ним (HTTP через порт 80)?
Я думаю настроить сервер с несколькими IP-адресами. Он может получить доступ к Интернету с помощью DHCP на одном из них. Другой будет настроен на статический IP-адрес. Компьютеры приложений будут настроены так, чтобы заранее знать этот статический IP-адрес и отправлять на него запросы. Однако в руководствах, которые показывают, как это сделать, я должен ввести свой шлюз и маску подсети. И не будут ли они меняться в зависимости от сети, к которой я подключаюсь?
Извините меня, если я упускаю что-то совершенно очевидное или упускаю из виду другие факторы. Я почти ничего не знаю о нетворкинге.
Если есть аппаратное обеспечение, которое может помочь, это прекрасно.
Это Виста и ХР.
решение1
Попытка угадать, какой статический IP-адрес не будет конфликтовать, — это напрашиваться на неприятности. Как предположил derobert, multicast DNS + DNS-SD — это хорошо. Единственный стек для Windows —Bonjour от Appleреализация, которая даст вам возможность регистрировать и разрешать вашу службу в локальной сети, а также с некоторой дополнительной настройкой, пробить дыру в брандмауэре (если маршрутизатор поддерживает NAT-PMP или uPnP) и обновить зону DNS с помощью соответствующих записей DNS-SD.
Вам, вероятно, понадобится написать скрипт, чтобы привязать Bonjour к конфигурации вашего приложения, но не зная, что представляет собой ваше приложение, трудно сказать, что подойдет лучше всего. Тем не менее, утилита командной строки dns-sd.exe, автоматизированная с помощью простого пакетного или WSH-скрипта, может справиться с этой задачей, как и различные привязки для Python, Perl или Ruby для менее тривиальных конфигураций.
решение2
Обычно это решается с помощью одного из нескольких протоколов обнаружения сервисов, которые уже доступны. Например, см.Статья Zeroconf в Википедии. Многоадресная рассылка DNS + DNS-SD, по-видимому, является в настоящее время популярным и широко поддерживаемым методом, хотя есть и другие (и большинство из них упоминается в Wiki).
Например, существует mod-dnssd для apache2, который позволяет Apache использовать Avahi для самообъявления через многоадресную DNS.
решение3
Поскольку, судя по всему, они почти всегда будут находиться в одной сети, разве нельзя просто запустить WINS на компьютере-«сервере» и подключиться по имени NetBIOS?
Таким образом, вам вообще не придется беспокоиться об IP-адресе.
На самом деле, если подумать, то WINS вам, вероятно, даже не нужен, NetBIOS должен с этим справиться.