2008-09-18 5 views
1

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

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

ответ

2

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

Я тестировал его, и он отлично работает.

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

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

0

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

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

+0

Я пытался избежать того, чтобы сохранить список устройств и их классов, так как кто-то всегда будет с одним я не думал о , но я согласен, что это может оказаться необходимым. – jeffm 2008-09-18 15:35:15

3

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

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

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

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

+0

Хорошая точка. См. Пояснения выше. – jeffm 2008-09-18 15:55:27

0

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

1

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

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

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

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

+0

Пункт, касающийся дизайна программы, соответствующей типу подключения. Причина в том, что это так, но трудно объяснить, не вникая в то, что делает приложение, которое я не могу сделать публично. – jeffm 2008-09-18 17:34:18

0

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

Широкополосные соединения могут получить перепутано до: routersoftware, что замерзает (бывает очень много для меня), или poweradapter, что картофель фри, ...