Я столкнулся с проблемой, когда мое приложение для Android не может устанавливать исходящие соединения с использованием класса TcpClient
(вопрос расположен здесь). Во время отладки и проведения дальнейших исследований я обнаружил, что мое устройство Android (уровень API 22) получает маску подсети 0.0.0.0
при подключении к моей сети WiFi. Мой 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-конфигурацию, как показано здесь, но использование этих настроек устарело на уровне API 17. Я также пытался установить свойство DhcpInfo.Netmask
вручную, но для этого требуется int
. Я рассчитал один на основе этого ответа, но он был слишком большим и стал uint
. Наконец, я просмотрел множество классов, включая Android.Net.Wifi.WifiManager
, чтобы узнать, есть ли способ изменить сетевую маску. Я ничего не нашел, но, возможно, я просто искал не в тех местах.
Любая помощь приветствуется!
Обновление:
По соображениям безопасности кажется, что это невозможно со стандартным Android API. Тем не менее, может ли Android NDK изменить маску подсети? Я понимаю, что он предоставляет доступ к устройству на более низком уровне, и мне не нужно помещать это приложение в магазин приложений (это для моего использовать только).