如何解决通过Wifi和移动数据向IoT设备发送网络请求
我有一个Xamarin应用程序,需要从LAN端和WAN端连接到设备。该设备(ESP8266)通过WiFi连接到内部网络,并且可以通过DDNS从WAN端进行访问。
当用户通过Xamarin应用程序发出请求时,在使用移动数据(即它们未连接到WiFi网络)的同时,请求到达IoT设备(IoT设备在路由器上进行UPNP映射)
IoT设备使用mDNS在本地网络上广为人知,如果我尝试通过Windows 10上的Chrome在连接到同一网络的计算机上进行连接,则连接成功(使用“ domain.local”)。在Android上的Chrome上执行相同操作会遇到DNS错误。
如果用户现在将电话与IoT设备连接到同一网络,则Xamarin应用程序请求将不再到达IoT设备。我有一些代码可以区分本地请求和远程请求,该请求可以发出“ domain.local”请求或“ domain.ddns.net”请求。
我了解台式机上的Apple Bonjour方面以及Android平台上缺少此方面。
有人知道如何解决吗?
解决方法
所以我已经解决了这个问题,并发布了答案,以防将来对某人有用。
在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请求时,到达的设备将其主机名称为“ 您的主机名”。
我正在使用ESP8266,因此在连接WiFi之前在设备上启动MDNS非常重要,否则设备将其主机名报告为ESP_xxxx,而不是“ yourhostname”,这是问题的真正根源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。