![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нахождение клиентом сервера
LexaDup © (2005-07-19 01:07:00)Нужна помощь в нахождении приложением-клиентом приложения-сервера в локальной сети. Прочитал, что клиент должен отослать запрос («Сервер, ты где?») на определённый порт сервера. Но как узнать IP сервера, работающего в локальной сети? Пробовал IP ставить в x.x.x.255 (широковещательная рассылка, у меня конкретно 192.168.0.255) но результата нет. Использую TClientSocket и TServerSocket.
isasa (2005-07-20 13:21:00) [1]>Сервер может создаваться на любой машине, поэтому вариант с введением IP сервера вручную многих не устраивал.
А если их несколько (ну два, например)?
Digitman (2005-07-20 09:52:00) [2]
> DiamondShark © (19.07.05 16:41) [10]
Речь идет об ЛВС .. скорее всего - корпоративной ..
ЛВС же, думаю, предполагает наличие администрирующего ее персонала, в задачи которого входит в т.ч. и настройка такого рода программ (либо консультирование пользователей по настройке)
Под "знать в лицо" я подразумевал, что серверное ПО в корпоративной ЛВС как правило устанавливается на специально выделенные хосты, а не гуляет где попало.
А уж как эти хосты идентифицируются в сети - то ли по IP-адресу, то ли иначе - администраторы ЛВС, разумеется, знают лучше пользователей
Eraser (2005-07-20 01:12:00) [3]LexaDup (19.07.05 23:04) [11]
Могу добавить, что надо ещё посмотреть в сторону Multicast, т.к. есть ряд причин, по которым он предпочтительнее чем UDP, в идеале в программе должен быть выбор: использовать для широковещания мультикаст или UDP broadcast.
LexaDup (2005-07-19 23:04:00) [4]Добавил поиск сервера через UDP в основную программу и провёл пару тестов.Всё работает.Сеть локальная, админа нет :). Сервер может создаваться на любой машине, поэтому вариант с введением IP сервера вручную многих не устраивал.
Единственный геморой при тестировании - фаерволы.Причём реакция разных фаерволов(ну и с разными настройками) на поиск сервера разная.Но без фаерволов всё 100% было нормально.
Итак, за неимением другой схемы останавливаюсь на:
поиск сервера по UDP-передача данных по TCP.
Всем спасибо.
DiamondShark (2005-07-19 16:41:00) [5]
> Digitman © (19.07.05 12:21) [6]
> и вообще это дурь.
> клиент должен знать "свои" серверы "в лицо" !
"В лицо" -- это, конечно, очень технический термин.
Если же с кухонного на технический это переводится как "IP адрес", то требование знания IP адресов и есть дурь.
isasa (2005-07-19 13:08:00) [6]>Дальше первого коммутатора цурюк не уйдет :)
Ага, между прочим, нужно чтобы эта фигня работала, т.е. ходила, т.к. является частью тех. процесса фирмы (и стоит немерянных денег).
dmitry501 (2005-07-19 12:59:00) [7]Настроить VLAN
Дальше первого коммутатора цурюк не уйдет :)
isasa (2005-07-19 12:36:00) [8]не мое это дело...
но неплохо определиться с маской сети на нашине клиента для широковещательной рассылки :).
У меня в юзанье есть немецкая программуля типа клиент-сервер,
с эл. ключем.
Так она для первого поиска сервера и ключа гатит запрос
255.255.255.255:порт (аллес цурюк!)
и как после этого админить сеть
Digitman (2005-07-19 12:21:00) [9]и вообще это дурь.
клиент должен знать "свои" серверы "в лицо" !
ах не знает он, бедняжка ? что ж, это его проблемы ..
или проблемы дурня-админа, не исполняющего свои обязанности как положено
dmitry501 (2005-07-19 12:10:00) [10]Нет 100% гарантии доставки UDP пакетов в некачественной сети (Internet, радио и пр.). Поэтому поиск серверов по UDP желательно делать несколько раз.
Digitman (2005-07-19 12:04:00) [11]
> Кто как считает по данному поводу?
что тут сказать ?
схема имеет право на жизнь..
LexaDup (2005-07-19 12:01:00) [12]Digitman © :
спасибо, уже начинает получаться.
Т.к программа уже практически написана и при ручном вводе IP работает, переписывать её заново, используя TIdUDPClient/TIdUDPServer, очень не хочется (больше всего не радует перспектива отладки почти с 0).
Т.к задача заключается только в поиске активного сервера и первые успехи с TIdUDPClient/TIdUDPServer уже появились, думаю просто добавить этот код в основную программу (т.е. через UDP получать только адрес сервера).Кто как считает по данному поводу?
dmitry501 ©:
как я уже написал, основная программа вполне работоспособна,т.е. проблема не в закрытых портах. Насчёт обрубания запросов - вопрос сложнее.Как можно это проверить?Но если это правда не 100% реализуемо, то выход я вижу в вышенаписанном.
Digitman (2005-07-19 08:23:00) [13]
> широковещательная рассылка
> TClientSocket и TServerSocket
эти классы предназначены для организации транспортного уровня с использованием искл-но TCP, а TCP не предусматривает бродкастинг
для широковещательной рассылки нужно использовать либо мультикастинг (что весьма проблематично при использовании TClientSocket и TServerSocket и к тому же не 100%-но реализуемо для любой системы) либо использовать UDP (см. классы TIdUDPClient/Server в составе Indy-пакета)
dmitry501 (2005-07-19 05:20:00) [14]А подробнее нельзя написать?
Может у вас порты закрыты? Или широковещательные запросы коммутатор/шлюз/маршрутизатор рубит?