【发布时间】:2019-06-13 20:27:21
【问题描述】:
我遇到了一个问题,我的 Android 应用程序无法使用 TcpClient 类进行传出连接(问题位于 here)。在调试和进行进一步研究时,我发现我的 Android 设备(API 级别 22)在连接到我的 WiFi 网络时收到了0.0.0.0 的子网掩码。我的 DHCP 服务器配置为使用255.255.255.0,所以我相信这种差异可能是我的另一个问题的根源。这是我的代码:
//Connect to the WiFi network
int id = WiFiManager.AddNetwork(new WifiConfiguration()
{
Ssid = $"\"{ssid}\"",
PreSharedKey = $"\"{password}\""
});
WiFiManager.EnableNetwork(id, true);
WiFiManager.Reconnect();
//Retrieve subnet mask (for debugging)
int subnet_mask = WiFiManager.DhcpInfo.Netmask;
subnet_mask 返回0,DhcpInfo 类的格式化版本显示:
{ipaddr 10.0.0.15 gateway 10.0.0.0 netmask 0.0.0.0 dns1 10.0.0.0 dns2 0.0.0.0 DHCP server
10.0.0.0 lease 43200 seconds}
在这种情况下,有什么方法可以在 Android API 中手动更改子网掩码(或“网络掩码”)?我尝试使用静态 IP 配置,如图所示 @987654322 @,但在 API 级别 17 中已弃用这些设置。我也尝试手动设置 DhcpInfo.Netmask 属性,但它需要 int。我根据this answer计算了一个,但是它太大了,变成了uint。最后,我查看了各种类,包括Android.Net.Wifi.WifiManager,看看是否有办法更改网络掩码。我什么都没找到,但我可能只是找错地方了。
非常感谢任何帮助!
更新:
出于安全原因,标准 Android API 似乎无法做到这一点。 但是,Android NDK 是否可以更改子网掩码? 我了解它提供了对设备的较低级别的访问权限,并且我不需要将这个应用程序放在应用商店(它是为我的仅使用)。
【问题讨论】:
标签: android xamarin.forms dhcp subnet netmask