我正在开发嵌入式 Linux 上的应用程序。用户可以选择从 Web 门户更改设备的 IP 地址。
我有一个 Windows 应用程序(基于 C# 构建),可以通过 API 与设备通信,但为此我需要知道设备的 IP 地址。我想构建一个简单的搜索实用程序,以便用户能够在设备通过以太网电缆连接到 PC 时搜索设备(设备 IP 和 PC 的 IP 地址可以位于不同的网络上)
因此假设我的 Windows 机器有以太网 IP 地址192.168.20.45
,并且 Linux 设备有 IP 10.15.11.120
,则 Windows 软件仍然应该能够搜索它并显示它。
在搜索这个问题时我发现,uPnP
但所有的教程都指向我不想要的媒体服务器。
有人能建议我什么方法适合我想要的吗?
答案1
UPnP 中与您相关的部分是 SSDP,即服务发现协议。(SSDP 可以单独使用 - 它不必与任何媒体相关服务或家庭路由器称为“UPnP”的 IGD 服务捆绑在一起。)
但是,如果您不需要特别使用 SSDP,它可能会不必要地复杂。(UPnP 家族中的所有东西都涉及大量 XML 和 SOAP。)
一个更简单的替代方案是 mDNS/DNS-SD,它已经在全尺寸 Linux 环境中广泛使用 - avahi-daemon 以及 macOS Bonjour 都实现了设备和/或服务发现。打印机、智能扬声器或 Chromecast 等设备也已使用 mDNS 进行发现。
最后,如果 mDNS 也太过繁重,您可以发明自己的发现协议 - 选择一个多播组地址,让 PC 向其发送“发现”UDP 数据包,您的设备将接收该数据包并向同一多播组回复“哟,我在这里,我的地址是”数据包。然后让 PC 接收该多播组上的设备广告。这或多或少就是 SSDP 和 mDNS 的工作原理。
(使用广播(又称 IPv6 中的全主机多播)也是可能的 - 许多特定于供应商的发现工具都以这种方式使用广播数据包。)