【问题标题】:How do Internet-Of-Things apps detect if the device is local or not?物联网应用程序如何检测设备是否为本地设备?
【发布时间】:2014-10-29 03:30:10
【问题描述】:

在其他设备中,我有一个 Belkin WeMo 开关和一个 3M WiFi Thermostat。两者都带有 Android 应用程序。当我在家时打开应用程序(与设备在同一 WiFi 子网中的电话),应用程序说设备是“本地的”,或者应用程序“直接”连接到设备。然后我所做的任何更改都会直接反映在设备上。

如果我从我家外面的任何地方连接,它就会“知道”该设备不是本地设备。如果我理解正确,它会在某个地方更新自己的服务器,最终家里的设备会得到更新。

应用如何做到这一点?我想复制那个功能。

基本上,我有一个 Raspberry Pi,假设它通过 GPIO 执行某些操作,我可以通过访问网页来触发该操作。在我的家庭网络上,可以通过http://192.168.10.25/do_something 访问网页...在我的家庭网络之外,可以通过http://my_custom_name.some_free_dynamic_dns.com:8080/do_something 访问网页。我已将路由器设置为将 WAN 上的 8080 端口转发到 LAN 上的 192.168.10.25:80。这行得通。

如何避免出现 2 页?我想编写一个应用程序来有效地向我展示192.168.10.25/do_something URL。当我在家时,它应该“自动”检测到手机与 URL 在同一个网络上,然后直接打开192.168.10.25/do_something ...当我在外面时,它也应该“自动”检测到并启动http://my_custom_name.some_Free_dynamaic_dns.com:8080/do_something

这里的关键部分是,在家时,即使我的 ISP 已关闭且主机名无法解析,也没有关系,因为一切都是本地的。

我该怎么做?

【问题讨论】:

    标签: android network-programming iot


    【解决方案1】:

    让您的应用首先尝试连接到位于 192.168.10.25(或您选择的任何本地地址)的 Web 服务器。如果在合理的时间内(5 秒就足够了)没有应答,则连接到外部网络服务器。

    为了安全起见,您可能需要确保 192.168.10.25 的网络服务器实际上是您的网络服务器。您可以通过使用质询和响应以及公钥加密来做到这一点。如果您愿意,我可以提供更多详细信息。

    您可以通过查看手机的 IP 地址来尝试避免等待(不存在的)本地网络服务器。如果不是 192.168.x.y,你可以假设你不是本地的,直接去外部网站。

    如果您将 192.168.10.25 直接嵌入到您的应用中,则无需进行主机查找。

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 2020-06-09
      • 2013-12-04
      • 2023-03-30
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多