Обнаружение сети в Java с использованием многоадресной рассылки - PullRequest
15 голосов
/ 15 июля 2010

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

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

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

Ответы [ 4 ]

17 голосов
/ 15 июля 2010

(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) клиент получает ответное сообщение от сервера.

8 голосов
/ 15 июля 2010

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

4 голосов
/ 21 ноября 2012

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

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

1 голос
/ 15 июля 2010

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

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

...