Come si rilevano le connessioni Internet remote, a banda larga o wireless in C++ per Windows?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Ho un programma di installazione (solo un normale programma MFC C++, non basato su Windows Installer) che deve impostare alcuni valori di registro in base al tipo di connessione Internet:banda larga, connessione remota e/o wireless.In questo momento queste informazioni vengono determinate ponendo una serie di domande sì o no.Il problema è che la persona che esegue le installazioni non è la stessa persona che possiede e utilizza il computer, quindi non è sempre sicura di quali dovrebbero essere le risposte a queste domande.Esiste un modo per determinare in modo programmatico una qualsiasi di queste informazioni?Il codice è scritto in C++ (e facoltativamente MFC) per Windows XP e versioni successive.Le soluzioni basate su .NET non sono un'opzione perché non voglio dover determinare se il framework è installato prima che il nostro programma di installazione possa essere eseguito.

Per chiarire, il problema è principalmente che le connessioni wireless e dialup non sono "sempre attive", il che crea la necessità che il nostro prodotto si comporti in modo diverso perché il nostro server non è sempre disponibile.Quindi una soluzione che misuri rigorosamente la velocità non sarebbe d'aiuto, sebbene esista un'impostazione che dipende dalla velocità in modo che il prodotto non tenti di inviare MB di informazioni tramite una connessione dialup non appena si connette.

È stato utile?

Soluzione

Utilizza l'API InternetGetConnectedState per recuperare lo stato della connessione Internet.

L'ho provato e funziona bene.

Ho trovato questo documento che può aiutare:

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

Altri suggerimenti

[Non ho idea di come ottenere esattamente le informazioni che hai chiesto, ma...] Forse potresti riformulare (per te stesso) ciò che cerchi di realizzare?Ad esempio, invece di chiedere "l'utente dispone di banda larga o connessione remota", chiedi "quanta larghezza di banda ha la connessione Internet dell'utente" e quindi puoi provare a rispondere alla domanda riformulata senza alcun input da parte dell'utente (ad esempio misurando la larghezza di banda).

A proposito.se chiedi all'utente solo "banda larga o connessione remota", potresti riscontrare alcuni problemi:

  • cosa succede se l'utente ha un tipo di connessione che non avevi previsto?
  • cosa succede se l'utente non lo sa (perché c'è solo un cavo Ethernet che va a un modem/router DSL PPPoE)?
  • cosa succede se l'utente è connesso tramite una serie di connessioni (VPN tramite dialup, a qualche altra rete dotata di banda larga?)

In questi casi potrebbe essere più utile chiedere "capacità" anziché "tipo".

Per quanto riguarda la domanda "la connessione internet è permanente o no?":

  • il modo migliore sarebbe probabilmente rendere l'app abbastanza robusta da poterla gestire Sempre gestire una connessione non permanente :-) che funzionerebbe allo stesso modo con dialup e banda larga...
  • in alternativa, forse puoi scoprire da quanto tempo è già stata stabilita la connessione Internet dell'utente e confrontarla con il tempo di attività del sistema?Se la connessione è rimasta online per lo stesso tempo in cui il computer è stato in funzione, probabilmente si tratta di una connessione permanente.

Ad ogni modo, queste euristiche probabilmente falliranno per tipi di connessione oscuri.

Inoltre, per quanto riguarda il punto di non inviare molti dati:se le persone hanno una tariffa "banda larga + limite di traffico basso", non dovresti inviare molti dati anche se la larghezza di banda lo consente :-)

La soluzione migliore sarebbe quella di prendere la connessione di rete attiva predefinita, assicurarsi che sia una connessione Internet (ping google.com o simile) e poi chiedergli che tipo di dispositivo è.Dovresti essere in grado di determinare da ciò quale connessione ha l'utente.

Sono abbastanza fiducioso che ciò sia possibile, ma non sono sicuro di come procedere.

Penso che dovresti semplicemente fare un rapido test della velocità di connessione.Basta scaricare alcuni file di dimensioni specifiche, cronometrare il tempo necessario e conoscerai la velocità.Sono d'accordo con l'altro ragazzo, non chiedergli che tipo di connessione hanno, quello che è più importante è la velocità.Forse l'anno prossimo usciranno con il dialup a 100 Mbit... vuoi che tutti utilizzino questo fantastico nuovo dispositivo per ottenere la pessima versione a bassa larghezza di banda della tua app?

Sarei d'accordo con Oliver, come suggerisci tu:hai già la funzionalità per far fronte alla perdita di connessione, perché non abilitarla per impostazione predefinita.

Le connessioni a banda larga possono essere compromesse a causa di:software del router che si blocca (mi capita spesso), o un adattatore di alimentazione che frigge, ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top