Как обнаружить коммутируемое, широкополосное или беспроводное подключение к Интернету в C++ для Windows?

StackOverflow https://stackoverflow.com/questions/93545

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть программа установки (обычная программа C++ MFC, а не установщик Windows), которой необходимо установить некоторые значения реестра в зависимости от типа подключения к Интернету:широкополосный доступ, коммутируемое соединение и/или беспроводная связь.Прямо сейчас эта информация определяется путем задания серии вопросов, дающих или нет.Проблема в том, что человек, выполняющий установку, — это не тот человек, который владеет и использует компьютер, поэтому они не всегда уверены, какими должны быть ответы на эти вопросы.Есть ли способ программно определить любую эту информацию?Код написан на C++ (и дополнительно MFC) для Windows XP и более поздних версий.Решения на основе .NET не подходят, поскольку я не хочу определять, установлена ​​ли платформа, прежде чем можно будет запустить нашу программу установки.

Чтобы уточнить, проблема в основном заключается в том, что беспроводные и коммутируемые соединения не всегда активны, что приводит к необходимости того, чтобы наш продукт вел себя по-другому, поскольку наш сервер не всегда доступен.Таким образом, решение, строго измеряющее скорость, не помогло бы, хотя есть настройка, зависящая от скорости, чтобы продукт не пытался отправить МБ информации через коммутируемое соединение сразу после подключения.

Это было полезно?

Решение

Используйте API InternetGetConnectedState для получения состояния подключения к Интернету.

Я протестировал его, и он работает нормально.

Я нашел этот документ, который может помочь:

http://www.pcausa.com/resources/InetActive.txt

Другие советы

[Я понятия не имею, как получить именно ту информацию, которую вы просили, но...] Может быть, вы могли бы перефразировать (для себя), чего вы пытаетесь достичь?Например, вместо того, чтобы спрашивать «есть ли у пользователя широкополосный доступ или коммутируемый доступ», спросите «какую пропускную способность имеет интернет-соединение пользователя» — и тогда вы можете попытаться ответить на перефразированный вопрос без какого-либо участия пользователя (например, путем измерения пропускной способности).

Кстати.если вы спросите пользователя только о «широкополосном доступе или коммутируемом доступе», вы можете столкнуться с некоторыми проблемами:

  • что, если у пользователя есть какой-то тип соединения, который вы не ожидали?
  • что, если пользователь не знает (потому что к модему/маршрутизатору PPPoE DSL идет только сетевой кабель)?
  • что, если пользователь подключен через ряд подключений (VPN через коммутируемое соединение, к какой-либо другой сети с широкополосным доступом?)

В таких случаях может быть более полезным запрос «возможностей» вместо «типа».

По поводу вопроса "постоянное подключение к интернету или нет?":

  • лучшим способом, вероятно, было бы сделать приложение достаточно надежным, чтобы всегда справиться с непостоянным соединением :-) которое будет работать одинаково с коммутируемым доступом и широкополосным доступом...
  • в качестве альтернативы, может быть, вы можете узнать, как долго уже установлено подключение к Интернету у пользователя, и сравнить с временем безотказной работы системы?Если соединение было онлайн почти все время, пока работал компьютер, возможно, это постоянное соединение.

В любом случае, эти эвристики, вероятно, не сработают для неясных типов соединений.

Кроме того, что касается вопроса о том, чтобы не отправлять много данных:если у людей тариф «широкополосный + низкий лимит трафика», то тоже не стоит отправлять много данных, даже если пропускная способность позволяет :-)

Лучше всего было бы захватить активное сетевое соединение по умолчанию, убедиться, что это подключение к Интернету (ping google.com или подобное), а затем спросить, какой тип устройства это.По этому вы сможете определить, какое соединение имеет пользователь.

Я вполне уверен, что это возможно, но не знаю, как это сделать.

Я думаю, вам следует просто провести быстрый тест скорости соединения.Просто загрузите несколько файлов определенного размера, засеките, сколько времени это займет, и вы узнаете скорость.Я согласен с другим парнем, не спрашивайте их, какой у них тип соединения, важнее скорость.Возможно, в следующем году они выпустят 100-мегабитный коммутируемый доступ... вы хотите, чтобы все, кто использует это удивительное новое устройство, получили дрянную версию вашего приложения с низкой пропускной способностью?

Я бы согласился с Оливером, поскольку вы подразумеваете:у вас уже есть функция, позволяющая справиться с потерей соединения, почему бы не включить ее по умолчанию.

Широкополосное соединение может быть нарушено из-за:Программное обеспечение маршрутизатора, которое зависает (со мной часто случается), или адаптер питания, который зависает, ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top