【问题标题】:What is the best way to link my own hardware with my application on a LAN network?将我自己的硬件与 LAN 网络上的应用程序链接的最佳方式是什么?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    @Charlieface 在问题的 cmets 中解释了解决方案。

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

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

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

    How can I create a UDP server with static IP?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2013-11-06
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多