【问题标题】:Sending web requests to IoT device both on Wifi and on mobile data通过 Wifi 和移动数据向 IoT 设备发送 Web 请求
【发布时间】:2020-08-15 22:08:50
【问题描述】:

我有一个 Xamarin 应用程序,它需要从 LAN 端和 WAN 端连接到设备。该设备(ESP8266)通过 WiFi 连接到内部网络,可以通过 DDNS 从 WAN 端访问。

当用户发出请求(通过 Xamarin 应用程序),同时使用移动数据(即他们未连接到 WiFi 网络)时,请求到达 IoT 设备(IoT 设备在路由器上进行 UPNP 映射) .

物联网设备使用 mDNS 在本地网络上显示自己,如果我尝试在连接到同一网络的计算机上通过 Windows 10 上的 Chrome 进行连接,则连接成功(使用“domain.local”)。在 Android 上的 Chrome 上执行相同操作会导致 DNS 错误。

如果用户现在将手机连接到与 IoT 设备相同的网络,Xamarin 应用请求将不再到达 IoT 设备。我有一些代码可以区分本地请求和发出“domain.local”请求或“domain.ddns.net”请求的远程请求。

我了解我的台式机上的 Apple Bonjour 方面以及 Android 平台上的不足。

有谁知道如何解决这个问题?

【问题讨论】:

  • 1.有什么例外? 2. 你有一些代码来显示你是如何提出请求的吗?

标签: xamarin esp8266 bonjour mdns zeroconf


【解决方案1】:

所以我已经解决了这个问题并发布了答案,以防将来对某人有用。

在 Xamarin 中使用 Zeroconf https://github.com/novotnyllc/Zeroconf

private const string deviceHostName = "yourhostname"


    public static async void  GetDeviceIPAddress()
    {
        IReadOnlyList<IZeroconfHost> responses = null;

        responses = await ZeroconfResolver.ResolveAsync("_http._tcp.local.");

        foreach (var resp in responses)
        {
            if (resp.DisplayName == deviceHostName)
            {
                Debug.Print(resp.IPAddress);
            }
        }
    }

现在向 resp.IPAddress 发出 http 请求会到达将其主机名宣传为“yourhostname”的设备。

我使用的是 ESP8266,在连接 WiFi 之前在设备上启动 MDNS 很重要,否则设备会将其主机名报告为 ESP_xxxx 而不是“您的主机名”,这是问题的真正根源。

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2015-07-08
    • 2020-11-16
    • 2015-08-10
    • 2019-07-17
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多