¿Cómo se detectan conexiones a Internet de acceso telefónico, de banda ancha o inalámbricas en C++ para Windows?

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo un programa de instalación (solo un programa MFC C++ normal, no basado en Windows Installer) que necesita establecer algunos valores de registro según el tipo de conexión a Internet:banda ancha, acceso telefónico y/o inalámbrico.En este momento esta información se está determinando haciendo una serie de preguntas de sí o no.El problema es que la persona que realiza las instalaciones no es la misma que posee y utiliza la computadora, por lo que no siempre están seguros de cuáles deberían ser las respuestas a estas preguntas.¿Hay alguna manera de determinar programáticamente esta información?El código está escrito en C++ (y opcionalmente MFC) para Windows XP y versiones posteriores.Las soluciones basadas en .NET no son una opción porque no quiero tener que determinar si el marco está instalado antes de que se pueda ejecutar nuestro programa de instalación.

Para aclarar, el problema es principalmente que las conexiones inalámbricas y de acceso telefónico no están "siempre activas", lo que crea la necesidad de que nuestro producto se comporte de una manera diferente porque nuestro servidor no siempre está disponible.Por lo tanto, una solución estrictamente de medición de velocidad no ayudaría, aunque hay una configuración que depende de la velocidad para que el producto no intente enviar MB de información a través de una conexión de acceso telefónico tan pronto como se conecta.

¿Fue útil?

Solución

Utilice la API InternetGetConnectedState para recuperar el estado de la conexión a Internet.

Lo probé y funciona bien.

Encontré este documento que puede ayudar:

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

Otros consejos

[No tengo idea de cómo obtener exactamente la información que pediste, pero...] ¿Tal vez podrías reformular (para ti mismo) lo que intentas lograr?Por ejemplo, en lugar de preguntar "¿el usuario tiene banda ancha o acceso telefónico?", pregunte "cuánto ancho de banda tiene la conexión a Internet del usuario", y luego puede intentar responder la pregunta reformulada sin ninguna intervención del usuario (por ejemplo, midiendo el ancho de banda).

Por cierto.Si le pregunta al usuario sólo "banda ancha o acceso telefónico", puede encontrar algunos problemas:

  • ¿Qué pasa si el usuario tiene algún tipo de conexión que no anticipaste?
  • ¿Qué pasa si el usuario no lo sabe (porque solo hay un cable Ethernet que va a un módem/enrutador DSL PPPoE)?
  • ¿Qué pasa si el usuario está conectado a través de una serie de conexiones (VPN mediante acceso telefónico, a alguna otra red que tenga banda ancha?)

En esos casos, podría resultar más útil preguntar por "capacidades" en lugar de "tipo".

Respecto a la pregunta "¿La conexión a Internet es permanente o no?":

  • La mejor manera sería probablemente hacer que la aplicación sea lo suficientemente robusta como para siempre lidiar con una conexión no permanente :-) que funcionaría igual con acceso telefónico y banda ancha...
  • Alternativamente, ¿tal vez pueda averiguar cuánto tiempo lleva establecida la conexión a Internet del usuario y compararla con el tiempo de actividad del sistema?Si la conexión ha estado en línea durante casi todo el tiempo que la computadora estuvo funcionando, probablemente sea una conexión permanente.

De todos modos, estas heurísticas probablemente fallarán en el caso de tipos de conexión poco conocidos.

Además, con respecto al punto de no enviar muchos datos:si la gente tiene una tarifa de "banda ancha + límite de tráfico bajo", tampoco deberías enviar muchos datos incluso si el ancho de banda lo permite :-)

Lo mejor sería tomar la conexión de red activa predeterminada, asegurarse de que sea una conexión a Internet (ping google.com o similar) y luego preguntar qué tipo de dispositivo es.A partir de ahí debería poder determinar qué conexión tiene el usuario.

Estoy bastante seguro de que esto es posible, pero no estoy seguro de cómo hacerlo.

Creo que deberías hacer una prueba rápida de velocidad de conexión.Simplemente descargue algunos archivos de tamaño específico, mida cuánto tiempo lleva y sabrá la velocidad.Estoy de acuerdo con el otro, no le preguntes qué tipo de conexión tiene, lo más importante es la velocidad.Quizás el año que viene lancen un acceso telefónico de 100 mbit... ¿Quieres que todos los que utilicen este increíble nuevo dispositivo obtengan la mala versión de tu aplicación con poco ancho de banda?

Estoy de acuerdo con Oliver, como usted insinúa:Ya tienes la funcionalidad para hacer frente a la pérdida de conexión, ¿por qué no habilitarla de forma predeterminada?

Las conexiones de banda ancha pueden verse afectadas por:software de enrutador que se congela (me pasa mucho), o adaptador de corriente que fríe,…

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top