Comment détecter les connexions Internet par accès commuté, large bande ou sans fil en C ++ pour Windows?

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

  •  01-07-2019
  •  | 
  •  

Question

J'ai un programme d'installation (uniquement un programme C ++ MFC standard, non basé sur Windows Installer) qui doit définir certaines valeurs de registre en fonction du type de connexion Internet: large bande, accès à distance et / ou sans fil. Actuellement, cette information est déterminée en posant une série de questions par oui ou par non. Le problème est que la personne qui effectue les installations n’est pas la même personne qui possède et utilise l’ordinateur, elles ne sont donc pas toujours sûres de ce que devraient être les réponses à ces questions. Existe-t-il un moyen de déterminer par programme l'une quelconque de ces informations? Le code est écrit en C ++ (et éventuellement en MFC) pour Windows XP et supérieur. Les solutions basées sur .NET ne sont pas une option car je ne veux pas avoir à déterminer si le framework est installé avant que notre programme d'installation puisse être exécuté.

Pour clarifier, le problème est principalement que les connexions sans fil et à distance ne sont pas "toujours actives", ce qui oblige notre produit à se comporter différemment car notre serveur n'est pas toujours disponible. Donc, une solution strictement de mesure de la vitesse n’aiderait en rien, bien qu’il existe un paramètre dépendant de la vitesse afin que le produit ne tente pas d’envoyer des Mo d’informations par le biais d’une connexion par accès commuté dès la connexion.

Était-ce utile?

La solution

Utilisez l’API InternetGetConnectedState pour récupérer l’état de la connexion Internet.

Je l'ai testé et cela fonctionne bien.

J'ai trouvé ce document qui peut aider:

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

Autres conseils

[Je ne sais pas comment obtenir exactement les informations que vous avez demandées, mais ...] Peut-être pourriez-vous reformuler (pour vous-même) ce que vous essayez d'accomplir? Par exemple, au lieu de demander "l'utilisateur dispose-t-il d'une connexion haut débit ou d'une connexion commutée", demandez-lui "combien de bande passante la connexion Internet de l'utilisateur dispose-t-elle" - et vous pourrez ensuite essayer de répondre à la question reformulée sans aucune intervention de l'utilisateur (par exemple, en mesurant la bande passante).

Btw. si vous demandez simplement à l'utilisateur "haut débit ou accès à distance", vous risquez de rencontrer des problèmes:

  • Que se passe-t-il si l'utilisateur a un type de connexion que vous n'aviez pas prévu?
  • Que se passe-t-il si l'utilisateur ne le sait pas (car il n'y a qu'un câble Ethernet connecté à un modem / routeur PPPoE DSL)?
  • Que se passe-t-il si l'utilisateur est connecté via une série de connexions (VPN par numérotation, à un autre réseau disposant d'un haut débit?)

Demande de " capacités " au lieu de " type " pourrait être plus utile dans ces cas.

En ce qui concerne la question "la connexion Internet est-elle permanente ou non?":

  • La meilleure solution serait probablement de rendre l'application suffisamment robuste pour toujours faire face à une connexion non permanente :-) qui fonctionnerait de la même manière avec l'accès commuté et le haut débit ...
  • Sinon, vous pourrez peut-être savoir depuis combien de temps la connexion Internet de l'utilisateur est établie et la comparer avec la disponibilité du système? Si la connexion est en ligne depuis presque aussi longtemps que l'ordinateur était en marche, il s'agit probablement d'une connexion permanente.

Quoi qu'il en soit, ces heuristiques échoueront probablement pour des types de connexion obscurs.

En ce qui concerne le point de ne pas envoyer beaucoup de données: si les personnes ont une "limite de trafic large bande + faible". tarif, vous ne devriez pas envoyer beaucoup de données, même si la bande passante le permet: -)

Le mieux serait de récupérer la connexion réseau active par défaut, de s’assurer qu’il s’agit d’une connexion Internet (ping google.com ou similaire), puis de lui demander de quel type de périphérique il s’agit. Vous devriez pouvoir déterminer à partir de cette connexion l'utilisateur.

Je suis assez confiant que cela est possible, mais je ne sais pas comment s'y prendre.

Je pense que vous devriez juste faire un test rapide de la vitesse de connexion. Il suffit de télécharger des fichiers de taille spécifique, le temps qu’il faut, et vous connaîtrez la vitesse. Je suis d’accord avec les autres gars, ne leur demandez pas quel type de connexion ils ont, ce qui est plus important, c’est la vitesse. Peut-être que l'année prochaine, ils proposeront un accès commuté à 100 Mbits ... voulez-vous que tout le monde utilise ce nouvel appareil génial pour obtenir la version médiocre à faible bande passante de votre application?

Je suis d'accord avec oliver, comme vous le dites: vous avez déjà la fonctionnalité pour faire face à la perte de connexion, pourquoi ne pas l'activer par défaut.

Les connexions à large bande peuvent être gâchées par: un logiciel de routage qui se fige (cela m’arrive beaucoup), ou un adaptateur qui frit, ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top