Downloadgeschwindichkeit

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Pummelie

Betreff: Downloadgeschwindichkeit

BeitragSa, Jul 05, 2008 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, schon wieder ein Problem von mir.
(Die suche hat zwar Ergebnisse hervorgebracht, aber ich werd daraus nicht schlau Sad )
Also meine bissherige Abhilfe für den download von Dateien sah so aus:
Code: [AUSKLAPPEN]

    downloadfile("Sever", "Datei", "Speicherort")

    Function downloadfile(host$, url$, ziel$)
    tcp = OpenTCPStream(host$,80)
    If Not tcp Return 0
    WriteLine tcp, "GET " + url$ + " HTTP/1.0"
    WriteLine tcp, "host: " + host
    WriteLine tcp, ""
    Repeat
      z$ = ReadLine(tcp)
      If Left(z$,16) = "Content-Length: " size = Mid$(z$,17)
    Until ReadLine(tcp) = "" Or Eof(tcp)
    If Eof(tcp) Return 0
    Fileout = WriteFile(ziel$)
    If Not size
      Repeat
         WriteByte fileout, ReadByte(tcp)
      Until Eof(tcp)
    Else
      bank = CreateBank(size)
      ReadBytes bank, tcp, 0, size
      WriteBytes bank, fileout, 0, size
      FreeBank bank
    End If
    CloseFile fileout
    CloseTCPStream tcp
    Return 1
    End Function

Das hat auch wunderbar geklapt, doch ich konnte werder Fortschritt noch Geschwindichkeiten sehen!
Das einzige was mir Hinweiß darauf gab das der Download zuende war, war das das Prográmm weiter fortfuhr.

Ich hätte gern das es mir fortschritt und Geschwindichkeit anzeigt.
Danke schonmal!
 

Phlox

BeitragSa, Jul 05, 2008 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Frag mich nicht, woher ich den Code habe, ich hab es vergessen ---
(Programmierer bitte melden)

Code: [AUSKLAPPEN]
Function DownloadFile(url$,dest$="",port=80)

   If Lower$(Left$(url$,6))="ftp://"
      count=Len(url$)-7
      url$=Right$(url$,count)
   EndIf

   If Lower$(Left$(url$,7))="http://"
      count=Len(url$)-7
      url$=Right$(url$,count)
   EndIf

   pos=Instr(url$,"/")-1
   web$=Left$(url$,pos)
   file$=Right$(url$,Len(url$)-pos)

   If dest$=""
      dest$=url$
      While Instr(dest$,"/")
         dest$=Right$(dest$,Len(dest$)-Instr(dest$,"/"))
      Wend
   EndIf

   stream = OpenTCPStream(web$,port)

   If stream=0 Then Return 0
   
   WriteLine stream,"GET "+file$+" HTTP/1.0"
   WriteLine stream,"Host: "+web$
   WriteLine stream,""
   
   Delay 1
   
   returns$=ReadLine$(stream)
   stream_lenth=0
   While (returns$<>"") And (Not KeyDown(1))
      If Upper$(Left$(returns$,16))="CONTENT-LENGTH: "
      stream_length=Mid(returns$,17,Len(returns$)-16)
      EndIf
      returns$=ReadLine$(stream)
   Wend
   
    destfile = WriteFile(dest$)
   
   returnb=ReadByte(stream)
    wait=MilliSecs()+1000
   If destfile Then WriteByte destfile,returnb
   byte=0
   all=1

   While (ReadAvail(stream) Or MilliSecs()<wait) And (Not KeyDown(1))
      If MilliSecs()>chktime
         checked=byte
         all=all+byte
         byte=0
         kbps#=checked/1024.
         If stream_length>0 And kbps#>0
            remaining=((stream_length-all)/(kbps#*1000))
            hr=remaining/3600 - (remaining/3600 Mod 1)
            mi=remaining/60 - (remaining/60 Mod 1)
            se=remaining Mod 60
            hour$=hr
            minute$=mi
            seconds$=se
            If hr<10 Then hour$="0"+hr
            If mi<10 Then minute$="0"+mi
            If se<10 Then seconds$="0"+se
            remain$=hour$+":"+minute$+":"+seconds$
            If all=stream_length Then remain$="R:E:A:D:Y"
         Else
            remain$="??:??:??"
            If all=stream_length And all>1 Then remain$="R:E:A:D:Y"
         EndIf
         Cls
         Text 1,1,kbps#
         Text 1,20,all
         Text 1,40,stream_length
         ;Text 1,60,remain
         lastcheck=MilliSecs()
         chktime=MilliSecs()+1000
      EndIf
      If ReadAvail(stream)
         returnb=ReadByte(stream)
         If destfile Then WriteByte destfile,returnb
             wait=MilliSecs()+2000
         byte=byte+1
      EndIf
   Wend
   
   If KeyDown(1) Then
       CloseFile destfile
       DeleteFile destfile
       CloseTCPStream stream
       Return 0
    EndIf
   
   CloseTCPStream stream
   If destfile Then CloseFile destfile
   
   Return 1
   
End Function



MfG

Pummelie

BeitragSa, Jul 05, 2008 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Klapt irrgendwie net, kommt folgende Fehlermeldung:
Invalid Blitz2D Buffer handle
 

Phlox

BeitragSa, Jul 05, 2008 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei welchem Befehl?

Pummelie

BeitragSa, Jul 05, 2008 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei denen konnte ich es herausfinden:
Code: [AUSKLAPPEN]

         Cls

         Text 1,1,kbps#
 
         Text 1,20,all

         Text 1,40,stream_length

Bei jeden von ihnen
 

Phlox

BeitragSa, Jul 05, 2008 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
kann b2d kein Text? Komisch...

DAK

BeitragSa, Jul 05, 2008 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir (B3d) keine Probleme...
Gewinner der 6. und der 68. BlitzCodeCompo

Pummelie

BeitragSa, Jul 05, 2008 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab jetz auch geschaft, das es geht, aber naja.
Der speed ist mieß Sad die werte die angezeigt werden aktualiesieren sich vileicht alle minute und es vordert 70% meines PC.
Schade das das die einzige möglichkeit ist die Geschwindichkeit zu berechnen, es sollte eine schöne dll geben!

Edit:
Noch mals danke für alle, es geht jetz super!
  • Zuletzt bearbeitet von Pummelie am Fr, Jul 11, 2008 12:11, insgesamt einmal bearbeitet

flona

BeitragSo, Jul 06, 2008 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube die K-Net-Lib kann des, such mal danach
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit

Hip Teen

BeitragMo, Jul 07, 2008 11:06
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist garantiert nicht die einzige Möglichkeit, die Geschwindigkeit zu berechnen, man kann so Sachen auch geschickt programmieren. Ich mach mich mal heute Abend daran - so eine krude Funktion kann und darf man ja nicht so alleine hier im Forum lassen -.-


Edit: So, hier jetzt mal eine gescheitere Funktion. Auf jedenfall funktioniert die, man kann die auf beliebige Bandbreiten einstellen und sie zeigt zuverlässig die aktuelle Geschwindigkeit an (aktualisierungsintervall beliebig einstellbar), die Gesammtgeschwindigkeit und die Prozentzahl an. Lässt sich auch, um weniger CPU Zeit zu verschwenden, mit Timern oder Delay runterschalten, ohne dass die Downloadgeschwindigkeit leidet. Dazu muss man nur den Puffer anpassen. Hab aber nur den eigentlichen Downloadteil angepasst - durch den oberen Teil hatte ich keine Lust durchzublicken....
Ist aber nicht so wunderbar schön, wie die Funktion aussieht. Liegt daran, dass ich die bestehende abgewandelt habe. Also, vom Codestil muss man nicht lernen
Wink
Code: [AUSKLAPPEN]
Function DownloadFile(url$,dest$="",port=80)
   
   If Lower$(Left$(url$,6))="ftp://"
      count=Len(url$)-7
      url$=Right$(url$,count)
   EndIf

   If Lower$(Left$(url$,7))="http://"
      count=Len(url$)-7
      url$=Right$(url$,count)
   EndIf

   pos=Instr(url$,"/")-1
   web$=Left$(url$,pos)
   file$=Right$(url$,Len(url$)-pos)

   If dest$=""
      dest$=url$
      While Instr(dest$,"/")
         dest$=Right$(dest$,Len(dest$)-Instr(dest$,"/"))
      Wend
   EndIf

   stream = OpenTCPStream(web$,port)

   If stream=0 Then Return 0
   
   WriteLine stream,"GET "+file$+" HTTP/1.0"
   WriteLine stream,"Host: "+web$
   WriteLine stream,""
   
   Delay 1
   
   returns$=ReadLine$(stream)
   stream_length=0
   While (returns$<>"") And (Not KeyDown(1))
      If Upper$(Left$(returns$,16))="CONTENT-LENGTH: "
      stream_length=Mid(returns$,17,Len(returns$)-16)
      EndIf
      returns$=ReadLine$(stream)
   Wend
   
    destfile = WriteFile(dest$)
   
   returnb=ReadByte(stream)
    wait=MilliSecs()+1000
   If destfile Then WriteByte destfile,returnb
   byte=0
   all=1



   ; Hier beginnt mein Teil, der oben ist wohl einigermaßen OK, der andere Teil war aber... nicht so gut ;-)

   pufferGroesse = 102400 ; 100 kb Puffer, damit auch hohe Bandbreiten ausgenutzt werden können. Bei 100 mbit Leitungen und
                           ;höher ist ein höherer Wert vielleicht sinnvoll - hier geht probieren 2 Meter über studieren!
   bank = CreateBank (pufferGroesse)
   Local prozent#, Gedownloadet#, kbProSekunde#, messen = 1, zeit = MilliSecs()
   Stop
   zeitGesamt = MilliSecs()
   Repeat
      rest = ReadAvail (stream)
      If rest > 0 Then
         If GescwhMessen = 1 Then
            groesse = Ged
         End If
         If rest < pufferGroesse Then
            pufferGroesse = rest
         End If
         puffer = ReadBytes (bank, stream, 0, pufferGroesse)
         WriteBytes (bank, destfile, 0, pufferGroesse)
         Gedownloadet = Gedownloadet + pufferGroesse
         tempGedownloadet = tempGedownloadet + pufferGroesse
         Prozent = ((Gedownloadet / stream_length) * 100)
         zeitDifferenz = MilliSecs() - zeit
         
         Delay 10
         ;aktuelle Geschwindigkeit berechnen
         If zeitDifferenz > 200 Then ; Fünf mal die Sekunde die Geschwindigkeit berechnen
            kbProSekunde = tempGedownloadet / zeitDifferenz
            tempGedownloadet = 0
            zeit = MilliSecs()
            ; Ausgeben der Infos, kann auch anders erfolgen
            DebugLog "Geschwindigkeit: " + kbProSekunde + " kb/s"
            DebugLog "Fortschritt: " + Prozent + " %"
         End If
      End If
   Until Eof (stream)
   gesamtZeit# = ( (Float (MilliSecs() ) - Float (zeitGesamt) )  / 1000.0 )
   DebugLog "Zeit in s: " + gesamtZeit
   DebugLog "Gesamtgeschwindigkeit in kb/s: " + stream_length / (gesamtZeit*1000)
   CloseTCPStream stream
   If destfile Then CloseFile destfile
   Stop   
   Return 1
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group