Небольшая библиотека для добавления функции обнаружения локальной сети в ваши программы на C++ без каких-либо зависимостей.
Пользователи
Как построить
Как использовать
Пример программы
Инструмент обнаружения
Список пользователей библиотеки udp-discovery-cpp можно найти в документе USERS.md.
Эта библиотека использует CMake для создания статической библиотеки, примеров и инструментов. Чтобы построить все цели, выполните:
cd udp-discovery-cpp сборка mkdir сборка компакт-диска cmake -DBUILD_EXAMPLE=ON -DBUILD_TOOL=ON .. делать
Также можно просто добавить файлы реализации в проект и использовать систему сборки этого проекта:
udp_discovery_peer.cpp udp_discovery_ip_port.cpp udp_discovery_protocol.cpp
Эта библиотека не имеет зависимостей.
Пример программы udp-discovery-example может быть очень хорошим справочником по использованию этой библиотеки. Он использует 12021 в качестве порта и 7681412 в качестве идентификатора приложения. Эти значения должны выбрать пользователи библиотеки udp-discovery-cpp .
Чтобы запустить узел обнаружения, пользователи должны сначала создать объект udpdiscovery::PeerParameters и заполнить параметры:
udpdiscovery::PeerParameters параметры;// Устанавливает порт, который будет использоваться для получения и отправки пакетов обнаружения.parameters.set_port(kPort);// Устанавливает идентификатор приложения, могут быть обнаружены только одноранговые узлы с тем же идентификатором приложения.parameters.set_application_id (kApplicationId);// Этот одноранговый узел может обнаруживать другие одноранговые узлы.parameters.set_can_discover(true);// Этот одноранговый узел может быть обнаружен другими узлами.parameters.set_can_be_discovered(true);// Пользователи могут настраивать другие параметры (тайм-ауты, режим сравнения одноранговых узлов) в соответствии со своими потребностями.// См. файл udp_discovery_peer_parameters.hpp.
Затем создайте объект udpdiscovery::Peer и запустите обнаружение, предоставляя пользовательские данные, которые будут связаны с этим узлом:
udpdiscovery::Peer одноранговый; Peer.Start(параметры, user_data);
Пользовательские данные будут переданы и обнаружены другими узлами. Пользовательские данные могут использоваться каждым пользовательским приложением для хранения некоторых значимых данных, которыми приложение хочет поделиться между узлами.
Созданный и запущенный объект udpdiscovery::Peer можно использовать для вывода списка обнаруженных в данный момент пиров:
std::list<udpdiscovery::DiscoveredPeer> new_discovered_peers = Peer.ListDiscovered();
Есть два варианта сравнить обнаруженные пиры и считать их равными:
kSamePeerIp — сравнивается только часть IP полученного пакета обнаружения, поэтому несколько экземпляров приложения, отправляющего пакеты с одного и того же IP, будут рассматриваться как один одноранговый узел.
kSamePeerIpAndPort — значение по умолчанию, сравнивает IP-адрес и порт полученного пакета обнаружения, поэтому несколько экземпляров приложения, отправляющего пакеты с одного и того же IP-адреса, будут считаться разными узлами.
Пользователи могут использовать функцию udpdiscovery::Same для сравнения двух списков обнаруженных узлов, чтобы решить, является ли список обнаруженных узлов тем же, появляются ли новые узлы или некоторые узлы исчезают:
bool is_same = udpdiscovery::Same(parameters.same_peer_mode(), Discovered_peers, new_discovered_peers);
Сборка этой библиотеки CMake создает статическую библиотеку, пример программы udp-discovery-example и инструмент для обнаружения локальных узлов udp-discovery-tool .
Пример программы udp-discovery-example имеет следующие аргументы:
Использование: ./udp-discovery-example {broadcast|multicast|both} {discover|discoverable|both} [user_data] широковещательная передача — этот экземпляр будет использовать широковещательную рассылку, чтобы ее обнаружили другие. многоадресная рассылка — этот экземпляр будет использовать группу многоадресной рассылки (224.0.0.123) для обнаружения. оба — этот экземпляр будет использовать как широковещательную, так и многоадресную группу (224.0.0.123) для обнаружения. обнаружить — этот экземпляр будет иметь возможность обнаруживать только другие экземпляры Обнаруживаемый — этот экземпляр будет доступен только для обнаружения другими экземплярами. оба — этот экземпляр сможет обнаружить и быть обнаруженным другими экземплярами user_data — строка, отправленная при широковещании, отображается рядом с IP-адресом узла.
Когда программа-пример запускается в режиме обнаружения , она переходит в режим CLI, ожидая команд пользователя:
> помочь команды: help, user_data, выход
Команда user_data изменяет данные пользователя, связанные с этим узлом. Команда выхода завершает работу udp-discovery-example, корректно отправляя пакет kPacketIAmOutOfHere .
Инструмент обнаружения udp-discovery-tool имеет следующие аргументы:
Использование: порт ./udp-discovery-tool application_id application_id — целочисленный идентификатор приложения, которое необходимо обнаружить. порт - порт, используемый приложением