首页 > 解决方案 > 在 169.254.0.0/16 中连接到没有 DHCP 和私有 IP 地址的 WiFi 网络

问题描述

我有一个广播 WiFi AP 的设备,它没有 DHCP 服务器。device-name.local计算机和 iPhone 可以连接到它并以169.254.xy 中的 IP 结尾要连接的网络)。

由于某种原因,我的 Android 设备(在 Moto G6 Android 9 和 Pixel 3 XL Android 11 上测试)未能达到 IP 状态。他们可以与 AP 关联,但无法获得 169.254.xy IP。他们通常保持移动数据处于活动状态,或尝试切换到另一个工作 AP。

当我禁用移动数据并删除所有已知的 AP 时,他们仍然无法在关联后获得 IP。

当我在同一子网中手动设置一个 IP (由设法连接到该 IP 并登陆 169.254.xy 的计算机获得)时,它就可以工作了!名称解析不起作用,但 Android 设备能够通过使用其 IP 地址访问其他设备。

现在这很糟糕,特别是因为在建立与新 AP 的连接时,我没有找到任何不使用反射来设置静态 IP 地址的稳定 API。

有没有办法连接到 AP 并能够在whatever.local没有用户交互的情况下使用设备?

我的代码基本上执行了这些步骤,如果失败,则每一步重试 15 次(并从 #1 重新开始):

  1. 连接到 SSID

     WiFiForIoTPlugin.connect(ssid,
         password: 'XXXX', security: NetworkSecurity.WPA, joinOnce: true, withInternet: true))
    
  2. 获取 SSID WiFiForIoTPlugin.getSSID(),检查它是否与目标匹配

  3. 获取 RSSI 并检查它不为空或== -127

  4. 尝试解决myhostname.local(适用于 Linux、MacOS、iOS,但不适用于 Android)

  5. 尝试与设备通信,因为它的主机已解析并且我们有 IP 连接

标签: androidflutter

解决方案


推荐阅读