Internet Speedtest

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von magerquark.

    Internet Speedtest

    Hi Community,

    ich möchte ein kleines Programm programmieren, welches die Downloadgeschwindigkeit errechnet.
    Dazu verwende ich folgenden Code:

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Friend WithEvents speedtest As New Net.WebClient
    3. Dim dlfirst As Boolean = True
    4. Dim dlstart As Integer
    5. Dim dlend As Integer
    6. Dim dldif As Integer
    7. Dim dlspeed As Double
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. MsgBox(Environment.TickCount())
    10. End Sub
    11. Private Sub bt_dl_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_dl_start.Click
    12. If (IO.File.Exists("1mb.txt")) Then
    13. IO.File.Delete("1mb.txt")
    14. End If
    15. speedtest.DownloadFileAsync(New Uri("http://gamez64.net/1mb.txt"), "1mb.txt")
    16. lbl_dl_status.Text = "Verbinden..."
    17. bt_dl_start.Enabled = False
    18. End Sub
    19. Private Sub speedtest_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles speedtest.DownloadFileCompleted
    20. dlend = Environment.TickCount
    21. dldif = dlend - dlstart
    22. dlspeed = 1 / dldif
    23. MsgBox(dlspeed.ToString())
    24. End Sub
    25. Private Sub speedtest_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles speedtest.DownloadProgressChanged
    26. If (dlfirst = True) Then
    27. dlstart = Environment.TickCount()
    28. dlfirst = False
    29. End If
    30. pb_dl_status.Value = e.ProgressPercentage
    31. lbl_dl_status.Text = "Herunterladen... " & e.ProgressPercentage & "%"
    32. End Sub
    33. End Class
    Allerdings gibt die MessageBox immer 1,1***e+** aus.
    Das kann doch nicht stimmen. Ich muss also irgendwo einen Logikfehler haben... Könnt ihr mir da helfen?
    Sowas habe ich auch mal versucht und habe eine gepimpte 1 Mb-Textdatei von einem Server per http runterladen lassen. Habe auch die Zeit gemessen, kam aber immer das gleiche raus, glaube aber was anderes als bei dir... Ein bisschen improvisiert, mit einem Timer, kommt wenigstens immer ein anderes Ergebnis raus:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zeit As Long = 0
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. zeit = 0
    5. Dim speedtest As New Net.WebClient
    6. If IO.File.Exists("1mb.txt") Then
    7. IO.File.Delete("1mb.txt")
    8. End If
    9. speedtest.DownloadFileAsync(New Uri("http://kevin89.abacado.net/Dateien/Speedtest/1mb.txt"), "1mb.txt")
    10. Timer1.Start()
    11. End Sub
    12. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    13. zeit += 1
    14. If FileLen("1mb.txt") = 1000000 Then
    15. Timer1.Stop()
    16. MsgBox("Fertig: " & zeit)
    17. End If
    18. End Sub
    19. End Class

    aber ist halt nicht so genau...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kevin89“ ()

    Gelöst!

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Friend WithEvents speedtest As New Net.WebClient
    3. Dim dlfirst As Boolean = True
    4. Dim dlstart As Integer
    5. Dim dlend As Integer
    6. Dim dldif As Integer
    7. Dim dlspeed As Double
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. MsgBox(Environment.TickCount())
    10. End Sub
    11. Private Sub bt_dl_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_dl_start.Click
    12. If (IO.File.Exists("1mb.txt")) Then
    13. IO.File.Delete("1mb.txt")
    14. End If
    15. speedtest.DownloadFileAsync(New Uri("http://gamez64.net/1mb.txt"), "1mb.txt")
    16. lbl_dl_status.Text = "Verbinden..."
    17. bt_dl_start.Enabled = False
    18. dlstart = Environment.TickCount()
    19. End Sub
    20. Private Sub speedtest_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles speedtest.DownloadFileCompleted
    21. dlend = Environment.TickCount
    22. dldif = dlend - dlstart
    23. MsgBox("Ihr PC benötigt " & dldif.ToString() & "ms, um eine Datei mit 1MB herunterzuladen." & vbNewLine & "Die durchschnittliche Downloadgeschwindigkeit beträgt " & 1 / dldif * 1000 * 1000 & "kb/s.")
    24. End Sub
    25. Private Sub speedtest_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles speedtest.DownloadProgressChanged
    26. pb_dl_status.Value = e.ProgressPercentage
    27. lbl_dl_status.Text = "Herunterladen... " & e.ProgressPercentage & "%"
    28. End Sub
    29. End Class
    Das gibt mir 27 komma nochwas aus... Schneller ist mein Internet leider wirklich nicht xP
    Kleine Frage noch... (möchte keinen neuen Thread eröffnen...):
    Wie oben steht, steht in der MessageBox 27 komma nochwas. Da sind noch viele Kommastellen dahinter... Ich möchte aber nur 2 sehen... Wie kann ich das machen?