一个小型库,可将本地网络发现功能添加到您的 C++ 程序中,无需任何依赖项
用户
如何建造
如何使用
示例程序
发现工具
udp-discovery-cpp库用户列表请参考USERS.md文档。
该库使用 CMake 构建静态库、示例和工具。要构建所有目标,请执行以下操作:
cd udp-发现-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 作为应用程序 ID,这些值由udp-discovery-cpp库的用户决定。
要启动发现对等点,用户应首先创建udpdiscovery::PeerParameters对象并填写参数:
udpdiscovery::PeerParametersparameters;// 设置用于接收和发送发现数据包的端口。parameters.set_port(kPort);// 设置应用程序 id,只有具有相同应用程序 id 的对等点才能被发现。parameters.set_application_id (kApplicationId);// 该 Peer 可以发现其他 Peer。parameters.set_can_discover(true);// 该 Peer 可以被其他 Peer 发现peers.parameters.set_can_be_discovered(true);// 用户可以调整其他参数(超时、对等比较模式)以满足自己的需要。// 请参阅 udp_discovery_peer_parameters.hpp 文件。
然后创建一个udpdiscovery::Peer对象并开始发现,提供与该对等点关联的用户数据:
udpdiscovery::对等点; 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::相同(parameters.same_peer_mode(),discovered_peers,new_discovered_peers);
该库的 CMake 构建会生成静态库、示例程序udp-discovery-example和用于发现本地对等点udp-discovery-tool 的工具。
示例程序udp-discovery-example具有以下参数:
用法: ./udp-discovery-example {广播|多播|两者} {发现|可发现|两者} [用户数据] 广播 - 该实例将使用广播来被其他人发现 多播 - 该实例将使用多播组 (224.0.0.123) 进行发现 两者 - 此实例将使用广播和多播组 (224.0.0.123) 进行发现 发现 - 该实例将只能发现其他实例 可发现 - 该实例只能被其他实例发现 两者 - 该实例将能够发现其他实例并被其他实例发现 user_data - 广播时发送的字符串,显示在对等方 IP 旁边
当示例程序在可发现模式下运行时,它会进入 CLI 模式等待用户命令:
> 帮助 命令是:帮助、用户数据、退出
user_data命令更改与此对等方关联的用户数据。 exit命令优雅地退出udp-discovery-example发送kPacketIAmOutOfHere数据包。
发现工具udp-discovery-tool具有以下参数:
用法:./udp-discovery-tool application_id 端口 application_id - 要发现的应用程序的整数 ID port - 应用程序使用的端口