Как вы обнаруживаете коммутируемые, широкополосные или беспроводные интернет-соединения в C ++ для Windows? - PullRequest
1 голос
/ 18 сентября 2008

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

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

Ответы [ 6 ]

3 голосов
/ 18 сентября 2008

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

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

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

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

2 голосов
/ 18 января 2010

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

Я проверил это, и он отлично работает.

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

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

1 голос
/ 18 сентября 2008

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

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

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

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

0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

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

...