2009-05-11 8 views
4

Gibt es eine Möglichkeit in Win32, die Bandbreite einer gegebenen Netzwerkschnittstelle programmatisch zu bestimmen, ohne tatsächlich Daten zu übertragen? Ich möchte nur zwischen verschiedenen Arten von Schnittstellen unterscheiden (z. B. Einwahl vs DSL vs LAN), so dass eine grobe Größenordnung ist in Ordnung, ich brauche nicht wirklich die Bandbreite zu messen.Ermitteln Sie die Bandbreite/den Typ der Netzwerkschnittstelle, ohne Daten zu übertragen

Hintergrund für das Problem ist, dass meine Anwendung sehr bandbreitenhungrig ist, und ich möchte eine Warnung an den Benutzer anzeigen, wenn sie versuchen, es über eine Schnittstelle mit niedriger Bandbreite, z. Wählmodem oder GPRS-Modem.

Ich habe mir eine andere related questions angesehen, aber wenn möglich, möchte ich vermeiden, den Durchsatz zu messen. Insbesondere GPRS-Modems haben möglicherweise Nutzungsbeschränkungen, und ich möchte nicht auf eine Benutzerzulage verzichten - ich würde eher die schlechte Verbindung auf andere Weise erkennen und überhaupt keine Daten senden.

Ich bin am meisten interessiert an Win32/C++ Antworten, aber alle Ideen würden dankbar erhalten.

+1

Kann ich etwas messen, ohne es zu messen? Nr. –

+0

Ich möchte eine grobe Größenordnung, keine Messung. Es muss eine Möglichkeit geben, zwischen Einwahl, DSL und LAN zu unterscheiden. – snowcrash09

Antwort

4

Sie können InternetGetConnectedState verwenden, um den Verbindungstyp zu bestimmen (LAN/Modem/etc). Dies wird Ihnen sagen, ob sie eine anständige (nicht-Modem-) Verbindung ohne Bandbreitenübertragung haben.

Leider können Sie nicht viel darüber hinausgehen, ohne Daten zu verbinden und zu übertragen. Es gibt keine Möglichkeit für das System, die Bandbreitenbeschränkungen außerhalb seiner LAN-Verbindung zu kennen - dh: Sie könnten sich direkt mit Ihrem Gateway in einem LAN verbinden und es könnte eine schlechte Verbindung zur Außenwelt haben. Soweit Ihr Computer betroffen sein würde, aber es ist auf volle Geschwindigkeit lan Verbindung ...

+0

InternetGetConnectedState ist ein guter Vorschlag - danke. Ich bin bereit, das Risiko von Mist-Verbindungen einzugehen, alles was ich will ist eine Best-Effort-Lösung. – snowcrash09

3

Warum fragen Sie den Benutzer nicht? Er sollte es wissen.

Ihre App konnte die Informationen für die Netzwerkadresse zwischenspeichern und nur erneut fragen, ob sich die Netzwerkadresse geändert hat.

+0

Ich denke, das ist eine gute Lösung. – BobbyShaftoe

+0

@BobbyShaffto fühlen Sie sich frei, es zu erhöhen ;-) – lothar

+0

Dies ist wahrscheinlich meine Fallback-Option, wenn es keinen automatischen Weg, dies zu erreichen ist. – snowcrash09

6

Sie eine WMI-Abfrage verwenden können, gibt es natürlich Win32-Funktionen als auch Anrufe, aber diese Abfrage:

Select * from Win32_PerfFormattedData_Tcpip_NetworkInterface 
Verwandte Themen