Java: как заставить клиентов обнаруживать сервер в сети?

Во время учебы в университете у меня был личный проект по созданию простой чат-программы на Java с использованием сокетов TCP. Проект носил исключительно образовательный характер.

Меня не очень устраивало то, что клиент должен был знать IP-адрес сервера, чтобы подключиться к нему. Поэтому я подумал, что было бы неплохо, если бы клиенты могли определять, есть ли в сети какие-либо чат-серверы.

Как я могу реализовать такой механизм? Если бы вы могли указать мне в правильном направлении, я был бы признателен. :-)

Я думаю, что серверу придется делать какую-то трансляцию, но я не уверен, как это сделать.

PS: я знаю, что, вероятно, есть другие/лучшие способы сделать это, но сейчас меня особенно интересует, как заставить клиент обнаруживать серверы в сети.

И под сервером я подразумеваю серверную часть приложения чата, а не сервер Tomcat.


person Stian    schedule 21.09.2010    source источник


Ответы (3)


Есть много способов сделать это, но я рекомендую вам взглянуть на JGroups. Это может быть несколько излишним для чат-приложения, но его использование многоадресной рассылки предлагает интересные возможности, такие как безсерверные архитектуры.

person Peter Tillemans    schedule 21.09.2010
comment
Спасибо! JGroups кажется очень интересным. Я определенно думаю, что смогу использовать это, в нем даже есть учебник по созданию программы для чата: P - person Stian; 22.09.2010

Посмотрите на ZeroConf, которые предоставляют механизмы для анонсирования и обнаружения сервисов. Apple широко использует это под названием Bonjour.

Проект jmdns — это реализация Java, которая работает достаточно хорошо. http://jmdns.sourceforge.net/

person Thorbjørn Ravn Andersen    schedule 21.09.2010
comment
Спасибо, но я не думаю, что это соответствует моей потребности. Похоже, вам нужно настроить некоторые записи DNS на сервере? Как я уже сказал, под сервером я подразумеваю, что моя программа действует как сервер. Я хотел бы запустить программу как сервер на любой машине без какой-либо конфигурации (хотя конфигурация, которая может распространяться вместе с программой, приемлема). У меня не было времени, чтобы действительно прочитать о JmDNS, поэтому я могу ошибаться. - person Stian; 22.09.2010
comment
Нет. Он работает «из коробки» без каких-либо внешних серверов или настроек, и я считаю, что он идеально подходит для ваших нужд. (DNS в названии относится к технологии ZeroConf, основанной на многоадресной DNS, но не требующей DNS-сервера). - person Thorbjørn Ravn Andersen; 22.09.2010
comment
Хорошо. Но, похоже, у него нет никакой документации, поэтому я выберу JGroups. - person Stian; 22.09.2010

Вы можете попробовать использовать многоадресную рассылку, если она включена в вашей сети.

person Bruno    schedule 21.09.2010