Определенно вы можете отправить тестовый пакет для широковещательной передачи (255.255.255.255) через известный порт, который прослушивают все узлы.Это старая добрая техника для легкого открытия.Другие включают SSDP
или UPnP
.
Имейте в виду, что 255.255.255.255 работает только для UDP-трансляций
[Добавить] Я предпочитаю расширять свой ответ, а не комментировать.
1.Кто должен инициировать трансляцию?
Вы можете выбрать свою любимую модель трансляции.Все они взаимозаменяемы.
Модель 1 - это «предложение работы» и, на мой взгляд, моя любимая.Вы открываете сокет прослушивания на своем серверном приложении и затем периодически отправляете широковещательное сообщение реклама или лучше объявление , сообщающее всем, что открытая услуга доступна на определенном IP / порту (портне обязательно быть статичным).Любой узел, заинтересованный в общении, просто подключается к указанной конечной точке, чтобы использовать эту услугу.
Модель 2 - это «поиск работы», при котором сервер хранит молчание.Когда клиент хочет подключиться, он передает общее сообщение seek .Любой доступный сервер получает сообщение и либо отвечает (в одноадресном режиме), либо передает широковещательное сообщение, упомянутое выше.
Модель 2a - это «обратный поиск работы», когда клиент транслирует запрос на обслуживание не как общее сообщение, а включаетего конечная точка.Затем сервер подключается к конечной точке клиента, но протокол продолжается, поскольку клиентский узел запрашивает услугу у узла сервера.Они действуют как равноправные TCP-узлы.
2.Как часто?
Это зависит от нескольких факторов.Я не могу помочь вам выбрать окончательное количество миллисекунд, но я могу показать вам все факторы.Во-первых, как долго клиент должен ждать, чтобы сообщить пользователю, что проверка на наличие доступных служб завершена?Вы можете думать «мгновенно» или «1 секунда», но имейте в виду, что широковещательные пакеты имеют тенденцию перегружать сеть в соответствии с количеством серверов, доступных в сообществе.
Если вы выберете модель 1, начните слушатьдля доступных служб как можно скорее (т. е. при запуске приложения), а затем периодически удаляйте из списка те службы, чье сердцебиение (другое техническое имя для широковещательного пакета) не получено в течение T*2
или T*3
периода времени, где T
ваше время ожидания.Ручное сканирование, как правило, должно быть завершено в пределах T*1.5
или T*1.2
с учетом размера T