---
title: "Mäta överföringshastighet med Inet"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/59682-mäta-överföringshastighet-med-inet"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "mrdance"
published: "2002-11-19T14:11:53.000Z"
updated: "2002-11-19T15:48:45.000Z"
replies: 3
views: 375
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/59682-mäta-överföringshastighet-med-inet"
---

# Mäta överföringshastighet med Inet

## #1 — mrdance, 2002-11-19T14:11Z

Jag försöker mäta hastigheten när jag hämtar ett dokument via Inet. Problemet är att den först verkar mäta när ALL data har hämtats. Allting ser finfint ut hemma på bredbandsbolaget men då händer ju allt på en gång. =) Testade jag på ett modem så fylldes min progressbar först till 100% då den "var klar".

Variabeln STATEN sätts till true när state på INET = "response received". Obs! Filstorleken skriver jag i headern på servern o lagras i s. Här är mitt exempel;

Function getData(ByVal link As String, ByVal param As String) As String
    STATEN = False
    ' exekverar och hämtar upp data
    Dim vtdata As String
    Dim strdata As String
    Dim bdone As Boolean
    Dim started As Date
    Dim header() As String
    Dim size() As String
    Dim s As Long
    Dim strLength As Long
    Dim proc As Integer
    Dim speedStart As Date
    Dim speedTime As Date
    Dim intSpeed As Double
    Dim seconds As Double
    
    Dim timp As Integer
    Dim tmp() As String

    With frmSys.Inet
        .RequestTimeout = WEBTIMEOUT
        .AccessType = 0
        .Execute link, "POST", param
        started = Now
        On Error GoTo 0: On Error Resume Next
        Do
            DoEvents
            If CInt(DateDiff("s", started, Now)) \> CInt(WEBTIMEOUT) Or Err.Number \<\> 0 Then
                Call timeout
            End If
            Sleep (1)
        Loop While STATEN = False
        On Error GoTo 0
        header = Split(.GetHeader, Chr(13))
        size = Split(header(3), ":")
        s = CLng(size(1))
        bdone = False
        strdata = ""
             
        speedStart = Now
        Do While Not s = strLength

            vtdata = .GetChunk(2048, icString)
            strdata = strdata & vtdata
            strLength = Len(strdata)
            proc = strLength / s \* 100
            frmMain.lblProc = proc & " %"
            frmMain.proBar = proc
            frmMain.Label1.Caption = strLength & "/" & s
            ' speed
            seconds = CInt(DateDiff("s", speedStart, Now))
            If seconds \> 0 Then
                intSpeed = CInt((strLength / 1024) / seconds)
                frmMain.lblSpeed = intSpeed & " kb/s"
            End If
            If Len(vtdata) = 0 Then
               bdone = True
               frmMain.StatusBar1.Panels(1).Text = "Status: Ledig"
            End If
            DoEvents
            Sleep (1)
        Loop
        .Cancel
    End With
    

    getData = strdata
End Function

Permalänk: https://www.webforum.nu/p/59682

## #2 — niko, 2002-11-19T14:58Z

Förstår nog inte riktigt din kod. Var anropas getData? Var sätts STATEN till true? I "Inet_StateChanged"?

Borde du inte egentligen anropa .GetChunk inne i "Inet_StateChanged"?

PS.

Använd kod-taggarna och indrag så blir det lättare att läsa.  :) 

DS.

Permalänk: https://www.webforum.nu/p/860446

## #3 — mrdance, 2002-11-19T15:39Z

hmm

Indenteringen försvann när jag paste:ade in koden. STATEN sätts i state_changed, men jag kan lika gärna använda;

        Do
            DoEvents
            If CInt(DateDiff("s", started, Now)) \> CInt(WEBTIMEOUT) Or Err.Number \<\> 0 Then
                Call timeout
            End If
            Sleep (1)
        Loop While .StillExecuting

Hursomhelst verkar detta problem endast uppstå på modem. När jag använder modem fylls progressbaren först på vid slutet. Annars så fylls den på eftersom....skumt

/ Henrik

Permalänk: https://www.webforum.nu/p/860487

## #4 — niko, 2002-11-19T15:48Z

Fast jag förstår ändå inte din kod. Att "state=responsereceived" betyder väl inte säkert att **all** data har kommit? Iaf inte om det är ett större dokument.

Och då får du ju ett fel när du försöker att läsa med:

```
Do While Not s = strLength 
	vtdata = .GetChunk(2048, icString)
```

Du måste ju först kolla om det finns nåt kvar i bufferten?

Har du provat att ta bort "On Error Resume Next" för att se vad som verkligen händer?

PS.
Fyller "Sleep(1)" nån funktion?
DS.

Permalänk: https://www.webforum.nu/p/860499

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/59682-mäta-överföringshastighet-med-inet
