Почему IAsyncResult.AsyncWaitHandle.WaitOne возвращает false, когда у Wi-Fi нет подключения к Интернету, а мобильные данные включены? (ХАМАРИН)

Я пытаюсь выполнить синхронизацию со своим пользовательским устройством через соединение Wi-Fi. Все работает нормально, когда мои мобильные данные отключены, но когда они включены, они не будут работать (поскольку мое пользовательское устройство не имеет подключения к Интернету).

Вот где возникает проблема:

stateSuccess = true;
tcpclnt = new TcpClient();
IAsyncResult ar = tcpclnt.BeginConnect(ip, port, new AsyncCallback(connectCallback), stateSuccess);
int timeout = 3000;
stateSuccess = ar.AsyncWaitHandle.WaitOne(timeout, false);

когда у меня включены мобильные данные stateSuccess = false, но когда мобильные данные отключены stateSuccess = true. Я всегда подключен через Wi-Fi к своему пользовательскому устройству.

Мой connectCallback:

private void connectCallback(IAsyncResult ar)
        {
            var stateSuccess = (Boolean)ar.AsyncState;

            try
            {
                tcpclnt.EndConnect(ar);
            }
            catch (Exception exc)
            {
                //handle
            }

            try
            {
                if (tcpclnt != null && tcpclnt.Connected && stateSuccess)
                    return;

                tcpclnt.Close();
            }
            catch (Exception exc)
            {
                if (tcpclnt != null)
                    tcpclnt.Close();
            }
        }

Я думаю, что проблема где-то в том, что он выбрал неправильную сеть. Как я могу заставить его использовать сеть Wi-Fi, даже если у Wi-Fi нет подключения к Интернету?


person sesmajster    schedule 11.06.2020    source источник


Ответы (1)


Устройства не заботятся и не различают низкоуровневое сканирование радиомодуля (здесь мы говорим о телефонии), с которым приходится иметь дело фактической прошивке радио.

Если вы не хотите использовать WIFI, выключите его. Но если вы хотите принудительно использовать WIFI, просто отключите сотовые данные.

Изменить: я только что нашел обходной путь, который работает ТОЛЬКО для Android: https://stackoverflow.com/a/56590566/11104068

person Saamer    schedule 12.06.2020
comment
Я хочу использовать только WIFI, но я не хочу отключать мобильные данные каждый раз, когда хочу использовать приложение. Нет ли способа обойти это? - person sesmajster; 12.06.2020
comment
Нет никакого способа, если вы не сделаете джейлбрейк устройств, потому что у приложений нет разрешений на доступ к таким настройкам и информации. - person Saamer; 12.06.2020
comment
@sesmajster Я внес свой вклад в дополнительные исследования и нашел способ сделать это в Xamarin.Android. Посмотри - person Saamer; 12.06.2020
comment
Спасибо. Я смог заставить это работать для Android. Я еще не тестировал его для iOS - person sesmajster; 15.06.2020