Обнаружение клиентов в сети Wi-Fi - PullRequest
1 голос
/ 21 июля 2009

Я пишу Java-приложение, и мне нужно быстро обнаружить других работающих клиентов в любых проводных или беспроводных локальных сетях, чтобы установить TCP-соединение.

каков наилучший способ сделать это? Существуют ли библиотеки или фрагменты кода, которые могли бы сделать это?

Ответы [ 4 ]

8 голосов
/ 21 июля 2009

Многоадресный UDP - хороший способ сделать это. Он используется в нескольких технологиях, которые поддерживают автоматическое обнаружение сетевых устройств через локальные IP-сети (UPnP и ZeroConf).

Multicast UDP не является TCP, но он по-прежнему основан на IP и, следовательно, использует тот же механизм адресации, то есть IP-адреса. Довольно часто это сравнивается с радиовещанием, то есть отправителю многоадресной рассылки нужно только отправить 1 сообщение (т.е. это как широковещание), но только клиенты, которые «настроены» на канал многоадресной рассылки, получат его.

Вы можете сделать быстрый поиск в Google или Википедии по ним в качестве начала, но основная идея заключается в следующем:

  • когда клиент запускается, он отправляет многоадресное UDP-сообщение приветствия на некоторый предварительно заданный многоадресный адрес и порт (например, UPnP использует 239.255.255.250:1900)
  • существующие клиенты прослушивают входящие многоадресные «привет» сообщения по указанному адресу и порту - когда клиент получает их, он отправляет ответ отправителю
  • клиент, отправляющий сообщение «привет», получает ответ от каждого существующего клиента в сети и теперь знает IP-адрес каждого клиента

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

1 голос
/ 21 июля 2009

Сетевое сканирование может быть очень продолжительным, даже более продолжительным в беспроводных сетях. Если они вам нужны быстро через Java, вы можете внедрить сервер «точки встречи» в своей сети. Этот сервер прослушивает предопределенный порт, клиенты регистрируются на сервере при запуске, и сервер может распространять информацию о клиентах по запросу.

НТН.

0 голосов
/ 21 июля 2009

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

Он также предоставляет интерфейсы API поверх сокетов многоадресной рассылки.

Он используется в ряде проектов, таких как JBoss, Tomcat и других, для предоставления инфраструктуры для распределенного кэша. Подробнее здесь .

0 голосов
/ 21 июля 2009

Полагаю, вам нужно выполнить сканирование порта вашего приложения на все IP-адреса в вашей подсети.

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

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

Или вы отправляете трансляцию (которая обычно нацелена на x.x.x.255) и смотрите, кто отвечает. См. Передача дейтаграмм и Многоадресная рассылка . Но я думаю, что это больше не TCP / IP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...