Traffic zählen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

    Traffic zählen

    Hey Leute,

    möchte ein Programm schreiben, dass mitprotokolliert, wieviel KB am Tag verbraucht werden.

    Das Auslesen der Daten ist am schwierigsten.
    Wie könnte man das realisieren?

    MfG,
    Patschi
    Meine neue Homepage: pkern.at
    Wetter bei mir zu Haus:
    Hab es etwas umgeschrieben:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Timer1.Interval = 1000
    4. Timer1.Start()
    5. Label1.Text = "bytes sent: 0k" & vbNewLine & "bytes received: 0k"
    6. End Sub
    7. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. Dim performanceCounterCategory As New PerformanceCounterCategory("Network Interface")
    9. Dim instance As String = performanceCounterCategory.GetInstanceNames()(0)
    10. Dim performanceCounterSent As New PerformanceCounter("Network Interface", "Bytes Sent/sec", instance)
    11. Dim performanceCounterReceived As New PerformanceCounter("Network Interface", "Bytes Received/sec", instance)
    12. Label1.Text = "bytes sent: " & (performanceCounterSent.NextValue() / 1024) & "k" & vbNewLine & "bytes received: " & (performanceCounterReceived.NextValue() / 1024) & "k"
    13. End Sub
    14. End Class


    Bleibt aber immer auf 0 Byte.
    Meine neue Homepage: pkern.at
    Wetter bei mir zu Haus:
    richtige Instanz ausgewählt?
    Der performanceCounter wird dir wohl jeweils nur den aktuellen Wert zurückgeben, somit wäre es wohl in einer Schleife(wie bei dem Beispiel), besser, am besten in einem Thread/BackgroundWorker...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also in meinen Bisherigen Projekten habs ich immer mehr oder weniger so gelöst:

    VB.NET-Quellcode

    1. Imports System.Net.NetworkInformation
    2. Public Class Form1
    3. Dim DasInterface As NetworkInterface
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim Interfaces As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
    6. For Each Netzwerkinterface As NetworkInterface In Interfaces
    7. 'Hier musst du dann den Namen von den Netzwerkinterface eintragen, welches du haben möchtest.
    8. If Netzwerkinterface.Description = "Name deines Interfaces" Then
    9. DasInterface = Netzwerkinterface
    10. End If
    11. Next
    12. Timer1.Interval = 1000
    13. Timer1.Start()
    14. End Sub
    15. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    16. Label1.Text = "KB's gesendet: " & FormatNumber(DasInterface.GetIPv4Statistics.BytesSent / 1024, 2) & "KB" & vbNewLine & "KB's empfangen: " & FormatNumber(DasInterface.GetIPv4Statistics.BytesReceived / 1024, 2) & "KB"
    17. End Sub
    18. End Class


    Das einzige, was du für dein Projekt jetzt ändern müsstest, wäre der Name deines Interfaces an der Stelle eintragen.
    Du kannst auch machen, das der Benutzer das Netzwerkinterface aus einer Liste auswählen kann, oder du alle Netzwerkinterfaces überwachst.

    "DasInterface.GetIPv4Statistics.BytesSent" gibt die Bytes zurück, die seit dem Einloggen Gesendet wurden, wenn du die
    Bytes nur seit den Start des Programms zählen willst, musst du halt die Gesendeten Bytes beim Starten des Programms speichern,
    und dann die Gesendeten Bytes von den Bytes die du gespeichert hast subtrahieren.
    (Habs selber noch nicht getestet, dürfte aber funktionieren ;) )