1

我有基于具有以太网通信的微控制器的硬件。

微控制器中有一个 TCP 服务器。

为了配置硬件,我有一个用 C# 为 android 制作的应用程序。

反过来,该应用程序有一个 TCP 客户端。

为了让应用程序找到我的硬件,我正在做的是 ping 我手机同一网段的每个地址。也就是说,如果我的手机的IP地址是192.168.0.xx,我从地址192.168.0.1 ping到地址192.168.0.255。

那些响应的地址,我尝试打开一个套接字并发送一个数据帧,如果答案是正确的,我假设我在本地网络中找到了一个硬件(可能连接了多个)

显然,那些没有响应的 IP 地址,或者无法打开套接字或响应错误的 IP 地址将被丢弃。

这些有效地址显示在列表中,供用户选择与之交互的地址。

另外,这些有效地址会保存在应用程序中,以便下次打开应用程序时,它会自动连接到存储的地址,避免扫描IP地址。

用户第一次安装硬件并使用应用程序配置时,这对我来说似乎是正确的

问题是我被告知有用户他们的路由器配置为每月更新一次 IP 地址。

如果发生这种情况,应用程序应该再次执行对所有 IP 地址的扫描,这有点麻烦,因为扫描所有 IPs 需要一些时间,我认为用户不会乐于每月配置一次他们的应用程序和硬件。

另一个麻烦的解决方案可能是使用静态 IP 地址,但我认为这也不是一个好主意。

关于如何改进这一点的任何建议?

4

2 回答 2

0

@Charlieface 在问题的评论中解释了该解决方案。

我将在微控制器上实现一个 UDP 服务器,其 IP 地址在 224.0.0.0-239.255.255.255(多播 IP 地址)范围内。

当连接到所述服务器并发送数据帧时,将返回 ip 和其他参数,以便应用程序可以直接连接到硬件,而无需执行所有 IP 地址的扫描。

解决方案的更多细节,在以下 freeRTOs 线程中:

如何创建具有静态 IP 的 UDP 服务器?

于 2021-12-22T19:14:15.530 回答
0

您需要考虑子网。您假设您连接的子网是 /24。您还在 ping 广播地址 (.255),这是不必要的。主机不住在那里。

DHCP 分配将在租期中途更新其租约。如果您的硬件仍在网络上,它很可能会获得与大多数现代 DHCP 实现之前分配的相同 IP。

最后,考虑降低扫描中的任何超时值。扫描 /24 以查找主机以响应特定端口应在几秒钟内完成。

于 2021-12-22T02:09:09.617 回答