Доброго времени суток.
Подскажите в ситуации: в локальной сети есть ESP-модуль, который исполняет функции условного сервера - накопление и обработка информации, переданной клиентами. Соответственно есть неизвестное количество клиентов, которые по HTTP протоколу ( http://адрес_сервера/update&key=val?key2=val2 ) эту информацию предоставляют. Естественно (для интереса и максимальной реалистичности) в сети присутствуют другие устройства, которые отношения работе всей системы не имеют (в данном контексте - мусор). Ни клиенты ни сервер не знают друг о друге вообще ничего, кроме общих принципов приема/предоставления информации: как у людей - мы знаем, что у каждого человека вверху голова, а ноги внизу, но не знаем ни имени ни места жительства, до тех пор, пока не познакомимся; при кормлении, еду мы направляем в верхнюю часть туловища, а обувь подталкиваем снизу.
Задачи:
для клиентов - узнать адрес сервера, куда каждый из них будет отправлять информацию;
для сервера - собрать адреса всех клиентов, которые в данный момент времени находятся в сети, чтобы отслеживать их активности и, при необходимости, запрашивать доп. информацию.
Мой вариант решения: каждый клиент при запуске проходит сеть по каждому IP от 192.168.*.2 до 255 по заранее известному HTTP адресу (напр. http://192.168.*.*/hello ) и если получаем заранее известный ответ ( напр. JSON {"type" : "server"} ) - значит "УРА - познакомились, сервер найден", дальше работаем по алгоритму. Таким сервер формирует для себя список адресов клиентов, с которым в дальнейшем и работает.
Одно НО: этот вариант ОЧЕНЬ долгий - если сервер "сидит" на 255-ом адресе, процесс поиска может весьма затянуться, а если клиент внезапно отсоединяется - для актуализации списка его нужно выполнять периодически ...
Может есть какие другие, более оптимальные и быстрые варианты?
Если можно, то с примерами кода.
Подскажите в ситуации: в локальной сети есть ESP-модуль, который исполняет функции условного сервера - накопление и обработка информации, переданной клиентами. Соответственно есть неизвестное количество клиентов, которые по HTTP протоколу ( http://адрес_сервера/update&key=val?key2=val2 ) эту информацию предоставляют. Естественно (для интереса и максимальной реалистичности) в сети присутствуют другие устройства, которые отношения работе всей системы не имеют (в данном контексте - мусор). Ни клиенты ни сервер не знают друг о друге вообще ничего, кроме общих принципов приема/предоставления информации: как у людей - мы знаем, что у каждого человека вверху голова, а ноги внизу, но не знаем ни имени ни места жительства, до тех пор, пока не познакомимся; при кормлении, еду мы направляем в верхнюю часть туловища, а обувь подталкиваем снизу.
Задачи:
для клиентов - узнать адрес сервера, куда каждый из них будет отправлять информацию;
для сервера - собрать адреса всех клиентов, которые в данный момент времени находятся в сети, чтобы отслеживать их активности и, при необходимости, запрашивать доп. информацию.
Мой вариант решения: каждый клиент при запуске проходит сеть по каждому IP от 192.168.*.2 до 255 по заранее известному HTTP адресу (напр. http://192.168.*.*/hello ) и если получаем заранее известный ответ ( напр. JSON {"type" : "server"} ) - значит "УРА - познакомились, сервер найден", дальше работаем по алгоритму. Таким сервер формирует для себя список адресов клиентов, с которым в дальнейшем и работает.
Одно НО: этот вариант ОЧЕНЬ долгий - если сервер "сидит" на 255-ом адресе, процесс поиска может весьма затянуться, а если клиент внезапно отсоединяется - для актуализации списка его нужно выполнять периодически ...
Может есть какие другие, более оптимальные и быстрые варианты?
Если можно, то с примерами кода.