Как определить IP сервера базы данных через UDP в Java - PullRequest
1 голос
/ 12 марта 2010

Я пишу клиенты на Java, которые хранят данные на сервере базы данных. Пока что IP-адрес и порт сервера должны быть указаны в настройках клиента вручную. Я слышал, что можно автоматически определять IP серверов баз данных через широковещательную / многоадресную передачу / UDP (я не знаком с этими понятиями). Вопрос: Есть ли способ получить IP-адреса всех доступных серверов баз данных в локальной сети? Пока я работаю с системой баз данных h2.

Bye, Wolfgang

Ответы [ 2 ]

1 голос
/ 12 марта 2010

Использовать широковещательные рассылки UDP на серверах баз данных :) Это позволит вам принимать широковещательные рассылки на всех машинах в локальной сети, а сами широковещательные рассылки могут нести IP-адрес серверов. Для получения локального IP, используйте InetAddress ip = InetAddress.getLocalHost();

С http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html:

Передачи UDP-рассылок всегда включены на DatagramSocket. Для приема широковещательных пакетов DatagramSocket должен быть связан с подстановочным адресом. В некоторых реализациях широковещательные пакеты также могут приниматься, когда DatagramSocket привязан к более конкретному адресу.

Пример: DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888)); Что эквивалентно: DatagramSocket s = new DatagramSocket(8888); В обоих случаях создается DatagramSocket, способный принимать широковещательные сообщения через порт UDP 8888.

Изменить: вы также можете перебрать все IP-адреса в сети; используйте алгоритм на http://www.linglom.com/2007/02/20/how-to-find-subnet-number-ip-addresses-in-the-subnet-in-a-few-seconds/ для определения IP-адресов подсетей, итерации по ним и проверки каждого на наличие сервера H2 (попробуйте подключиться). Возможно, вы захотите, чтобы несколько потоков ускорили обнаружение.

0 голосов
/ 12 марта 2010

Возможно, вы также захотите использовать для этой цели библиотеку Bonjour / Zeroconf вместо того, чтобы изобретать собственное решение для динамического обнаружения служб.

См. Существуют ли другие библиотеки Java для bonjour / zeroconf, кроме JMDNS?

...