Como você detectar dial-up, banda larga ou conexões de internet sem fio em C ++ para Windows?

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu tenho um programa de instalação (apenas um programa regular C ++ MFC, não o Windows Installer com base) que precisa definir alguns valores de registro com base no tipo de conexão à Internet: banda larga, dial-up, e / ou sem fio. Agora esta informação está sendo determinada, pedindo uma série de sim ou não a perguntas. O problema é que a pessoa que faz as instalações não é a mesma pessoa que possui e utiliza o computador, de modo que eles não são sempre certeza do que as respostas a estas perguntas deve ser. Existe uma maneira de determinar programaticamente alguma desta informação? O código é escrito em C ++ (e opcionalmente MFC) para Windows XP e para cima. .NET baseada em soluções não são uma opção, porque eu não quero ter que determinar se o quadro está instalado antes do nosso programa de instalação pode ser executado.

Para esclarecer, a questão é, principalmente, que as conexões sem fio e discadas não são "always-on", o que cria uma necessidade para o nosso produto a se comportar de maneira diferente, porque o nosso servidor não está sempre disponível. Então uma solução estritamente medir velocidades não ajudaria, embora haja uma definição que está a uma velocidade tão dependente que o produto não tentar enviar MB de informações através de uma conexão dial-up, logo que ele se conecta.

Foi útil?

Solução

Use InternetGetConnectedState API para recuperar estado de conexão de internet.

Eu testei e funciona bem.

Eu encontrei este documento que pode ajudar:

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

Outras dicas

[Eu não tenho nenhuma idéia de como obter exatamente a informação que você pediu, mas ...] Talvez você poderia reformular (para si mesmo) o que você tenta realizar? Como, em vez de perguntar "se o usuário tiver banda larga ou dial-up", pergunte "quanto largura de faixa faz ligação à Internet do utilizador tem." - e então você pode tentar responder à questão reformulada, sem qualquer entrada do usuário (como medindo a largura de banda)

Btw. se você perguntar o usuário apenas para "banda larga ou dial-up", que você pode encontrar alguns problemas:

  • que se o usuário tem algum tipo de ligação que não previu?
  • e se o usuário não sabe (porque há apenas um cabo ethernet ir a um PPPoE DSL modem / router)?
  • e se o usuário está conectado através de uma série de conexões (VPN via dial-up, a alguma outra rede que tem banda larga?)

Pedir "capacidades" em vez de "tipo" pode ser mais útil nesses casos.

Em relação à pergunta "é a conexão de internet permanente ou não?":

  • melhor maneira seria provavelmente para fazer o suficiente robusta aplicativo para sempre lidar com uma conexão não-permanente :-) que iria trabalhar o mesmo com dial-up e banda larga ...
  • Em alternativa, talvez você possa descobrir quanto tempo conexão de internet do usuário foi já estabelecido, e comparar com a disponibilidade do sistema? Se a conexão foi em linha por quase tanto tempo quanto o computador estava funcionando, é provavelmente uma conexão permanente.

De qualquer forma, estas heurísticas irá provavelmente falhar por tipos de conexão obscuros.

Além disso, em relação ao ponto de não enviar grandes quantidades de dados: se as pessoas têm uma "banda larga + tráfego baixo limite" tarifa, você não deve enviar grandes quantidades de dados, quer mesmo que a largura de banda permite: -)

A melhor aposta seria para pegar a conexão de rede ativa padrão, garantir que ele é uma conexão de internet (ping google.com ou similar) e, em seguida, pedir-lhe que tipo de dispositivo que é. Você deve ser capaz de determinar a partir de que o que conexão o usuário tem.

Estou bastante confiante de que isso é possível, mas não sei como fazê-lo embora.

Eu acho que você deve apenas fazer um teste de conexão de velocidade rápida. Basta baixar alguns arquivos específicos de tamanho, tempo quanto tempo leva, e você saberá a velocidade. Concordo com o outro cara, não pedir-lhes que tipo de conexão que eles têm, o que é mais importante é a velocidade. Talvez no próximo ano eles saem com 100Mbit discada ... você quer todos usando este novo dispositivo incrível para obter a versão lowbandwidth porcaria do seu aplicativo?

Eu concordo com oliver, como você implica: você já tem a funcionalidade para lidar com a perda de conexão, por que não permitir que por padrão

.

conexões de banda larga pode ficar confuso para: routersoftware que congela (acontece muito para mim), ou poweradapter que batatas fritas, ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top