Обнаружение сети в Java с использованием многоадресной рассылки

Я пытаюсь создать клиентское/серверное Java-приложение. Оба клиента и сервер будут работать в одной и той же сети Wi-Fi. Сервер будет работать на определенном порту, о котором знает клиент.

Я планирую отправить многоадресное сообщение от клиента через сеть для этого конкретного порта, чтобы обнаружить сервер. Тем не менее, я не слишком уверен, как я могу узнать, какой IP-адрес в моей сети получил мое сообщение.

Нужно ли создавать сокет на клиенте и прослушивать входящие пакеты, как только я отправляю свое многоадресное сообщение в случае ответа сервера на сервер?

Спасибо заранее.

Ответы

Ответ 1

(1) сервер прослушивает предварительно настроенный порт

DatagramSocket s = new DatagramSocket(8888);
s.receive  //(1)
s.send     //(2)

(3) клиент отправляет сообщение на порт в широковещательном IP-адресе 255.255.255.255

DatagramSocket c = new DatagramSocket();
c.send(255.255.255.255:8888,msg)     //(3)
c.receive  //(4)

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

(3) передаст сообщение всем локальным машинам, сервер (1) получит сообщение с IP-адресом клиента.

(2) сервер отправляет ответное сообщение клиенту IP: порт

(4) клиент получает сообщение ответа от сервера.

Ответ 2

Я бы настоятельно рекомендовал использовать JGroups. Он имеет множество функций, и он будет делать все UDP-материалы. JBoss использует его для кластеризации.

Ответ 3

Вы можете попробовать использовать java.net.MulticastSocket (доступный с версии Java 1.1). Если вам не нужны богатые наборы функций libs, такие как jgroups, hazelcast и т.д., что простой Java API может служить вам достаточно хорошо.

См. Также примеры страниц здесь и здесь.

Ответ 4

Вы можете попробовать использовать SSDP. Это то, что UPnP-устройства используют для обнаружения друг друга. Это многоадресная рассылка на порт 1900 и просто использует действительно простые пакеты для отправки IP-адресов и служебной информации.

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