通过Wifi和移动数据向物联网设备发送网络请求



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

当用户(通过Xamarin应用程序(提出请求时,在使用移动数据(即他们没有连接到WiFi网络(时,请求到达物联网设备(物联网设备在路由器上进行UPNP映射(。

物联网设备使用mDNS在本地网络上表明自己的身份,如果我试图在连接到同一网络的机器上通过Windows 10上的Chrome进行连接,则连接成功(使用"domain.local"(。在Android上的Chrome上进行同样的操作会导致DNS错误。

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

我理解苹果在我的台式机上的Bonjour方面,以及在安卓平台上的不足。

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

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

使用Zeroconf库https://github.com/novotnyllc/ZeroconfXamarin

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,而不是"您的主机名",这才是问题的真正根源。

最新更新