Вкратце: Как надежно обнаружить сервер, работающий где-то на (предположительно несколько сегментированной) локальной сеть с конфигурацией нулевого клиентаСоздать (win32) службу Windows, видимую через сеть
Моего Клиентское приложение должно найти серверное приложение, не зная IP-адрес сервера. Он должен работать в локальной локальной сети, которая может быть разделена на сегменты с концентраторами или другими коммутационными устройствами.
У меня уже есть рабочее решение, но это немного громоздко, чтобы заставить его работать в многосегментных сетях. Он работает следующим образом:
Когда клиент запускается, он отправляет широковещательные передачи UDP в свой собственный сегмент сети. Если сервер работает в одном сегменте, он работает без каких-либо проблем - сервер отвечает соответствующими сообщениями.
Если сервер и клиент работают в сетях, разделенных концентратором/коммутатором, которые не будут перенаправлять UDP (наиболее вероятный случай), то у меня есть экземпляр сервера, работающий на каждом сегменте, и они направляют запросы клиентов каждому другой через TCP - но мне нужно настроить это для экземпляров сервера (просто, но все же боль для технической поддержки). Это основная проблема, которую мне нужно решить. Есть сайты, где у нас есть сотни клиентов, работающих на 5 или 6 отдельных сегментах.
Проблемы, с которыми я столкнулся: 1. Хотя мой установщик приложений позволяет использовать соответствующие порты на брандмауэре, иногда я сталкиваюсь с ситуациями, когда это не происходит должным образом. 2. Необходимость запуска нескольких экземпляров сервера (и, следовательно, их настройка и поддержка) в сетях концентратора/коммутатора, которые не будут перенаправлять UDP
Наконец-то мне нужно решение, которое будет работать без обслуживания в минимальной сети Windows (XP/2000/Vista), который, вероятно, не имеет настроенных служб Active Directory или других служб поиска.
Я не хочу отмечать какие-либо материалы для выполнения для этого - должен быть в состоянии сделать это с помощью простого VC++ или Delphi.
Какие подходы обычно используются коммерческими приложениями? Я знаю, что SQL Server использует комбинацию широковещательных и NetBEUI-вызовов (возможно, я ошибаюсь).
Заранее спасибо.
Возможно, есть намек на то, как это сделать на upnp.org? – djangofan