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