【发布时间】:2022-01-23 08:19:58
【问题描述】:
我有基于带有以太网通信的微控制器的硬件。
微控制器中有一个 TCP 服务器。
为了配置硬件,我有一个用 C# 为 android 制作的应用程序。
反过来,应用程序有一个 TCP 客户端。
为了让应用程序找到我的硬件,我正在做的是 ping 我手机同一网段的每个地址。 也就是说,如果我手机的IP地址是192.168.0.xx,我从地址192.168.0.1 ping到地址192.168.0.255。
那些响应的地址,我尝试打开一个套接字并发送一个数据帧,如果答案是正确的,我假设我在我的本地网络中找到了一个硬件(可能连接了多个)
很明显,那些没有响应,或者套接字无法打开或响应错误的 IP 地址将被丢弃。
这些有效地址显示在一个列表中,供用户选择与之交互。
另外,这些有效地址保存在应用中,下次打开应用时会自动连接到保存的地址,避免扫描IP地址。
当用户第一次安装硬件并使用应用程序进行配置时,这对我来说似乎是正确的
问题是我被告知有用户他们的路由器配置为每月更新一次 IP 地址。
如果发生这种情况,应用程序应该再次执行对所有 IP 地址的扫描,这有点麻烦,因为扫描所有 IP 地址需要一些时间,我认为用户不会乐于配置他们的应用程序和硬件一次一个月。
另一个麻烦的解决方案可能是使用静态 IP 地址,但我认为这也不是一个好主意。
有什么改进的建议吗?
【问题讨论】:
-
一个月一次?我虽然 DHCP 租用时间大约是 2 天。虽然这完全取决于 DHCP 服务器。静态 IP 分配就是为此专门进行的。
-
我没有检查,这是我正在为其开发硬件和应用程序的人告诉我的。到目前为止,在我完成测试的网络中,它没有更改分配给设备的 IP 地址。
-
这样做会导致您的应用程序被公司网络禁止。目标应该订阅特定的多播组,您可以向多播组发送请求。设备应报告其在 LAN 上的地址。
-
听起来您应该使用 UDP 广播或多播进行发现。在某个端口号上广播单个 UDP 消息,并且微控制器应配置为在同一端口上响应。这将拾取同一 LAN 上的所有设备
-
@gunr2171 大多数 DHCP 设置的标准做法是提供相同的 IP 地址,除非租约到期而不续订
标签: c# networking network-programming hostname hostname-verifier