Hi
ich möchte ein programm schreiben, welches dateien aus dem internet runterläd, diese zusammen setzt und dann als eine datei speichert.
Das ist alles kein Problem, nur möchte ich das Downloaden gerne im hintergrund laufen lassen und dabei nicht die ganze verbindung dicht machen.
Das was ich runterladen möchte, sind teile einer exe datei die dann später wieder zu einer exe datei zusammen gefügt werden sollen. Diese exe ist noch nicht fest, was das für eine werden soll, weil ich möchte das programm für mehrere andere programme einsetzen, um sie upzudaten.
Ich würde gerne das HTTP Protokoll zum Runterladen verwenden oder gibt es ein anderes Protokoll mit dem ich die DL geschwindigkeit einfacher festlegen kann?
Schon mal Danke im Vorraus.
Edit: was ich vieleicht auch noch dazu sagen sollte ist, das es auch unter Linux laufen muss also keine APIs...
Downloadgeschwindigkeit Festlegen
Downloadgeschwindigkeit Festlegen
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
Dazu brauchst du keine API.
Du musst halt in Blöcken runterladen.
Ich hab dir hier mal eine Procedure gebastelt.
Die Procedure sendet einen HTTP-Request an einen Server.
Darauf hin müsste eine Datei eintreffen.
Das merkt dein Downloadclient anhand des NetworkEvents 2.
Du musst dann wenn ich mich nicht irre einfach bei ReceiveNetworkData(ConnectionID, *DatenBuffer, Länge) die Länge deiner maximalen Blockgrösse angeben und eine Ladeschleife einrichten.
Du musst halt in Blöcken runterladen.
Ich hab dir hier mal eine Procedure gebastelt.
Code: Alles auswählen
Procedure SendDownloadRequest (ClientID.l,DeineDatei.s,DeineIP.s)
header.s="GET "+DeineDatei.s+" HTTP/1.1"
header.s+"Host: "+DeineIP.s
header.s+"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.12) Gecko/20050919 Firefox/1.0.7"
header.s+"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
header.s+"Accept-Language: de,de-de;q=0.5"
header.s+"Accept-Encoding: gzip,deflate"
header.s+"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"
header.s+"Keep-Alive: 300"
header.s+"Connection: keep-alive"
SendNetworkString (ClientID.l,header.s)
EndProcedure
Darauf hin müsste eine Datei eintreffen.
Das merkt dein Downloadclient anhand des NetworkEvents 2.
Du musst dann wenn ich mich nicht irre einfach bei ReceiveNetworkData(ConnectionID, *DatenBuffer, Länge) die Länge deiner maximalen Blockgrösse angeben und eine Ladeschleife einrichten.
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Den obigen Aufruf solltest du allerdings vor der Threaderstellung aufrufen, da er wie du siehst einen String verwendet.
Im Thread ist es dann recht simpel, wie Hroudwolf schon sagte:
Du liest beispielsweise Blöcke von 4096Byte Grösse und machst einen Delay(1000) in die Schleife.
Das wäre dann in etwa 4k/sec.
Im Thread ist es dann recht simpel, wie Hroudwolf schon sagte:
Du liest beispielsweise Blöcke von 4096Byte Grösse und machst einen Delay(1000) in die Schleife.
Das wäre dann in etwa 4k/sec.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Ja, aber ich glaube, dass nicht die Frage war, wie man einen HTTP-Get Befehl einrichtet (obwohl ich das auch noch nicht wusste, und verdammt interessant finde
), sondern wie man diese "Ladeschleife" einrichtet.
Wenn man den "HTTP-Get" Befehl mit dem "buffer" begrenzt, dann läd er doch immer wieder den "ersten Teil" runter.Oder verstehe ich da was an dem Prinzip falsch?
Wenn ich 5 Blöcke runterladen möchte, und die Procedure von Hroudtwolf inner For-Schleife 5 mal mache, dann fängt er dcch 5 mal NEU an...
Gr33tz
Tafkadasom2k5
P.S.: Wenn das völliger Murks ist, was ich hier schreibe und was meine Bedenken sind, dann klärt mich bitte auf-bin auf dem HTTP-Gebiet relaitver N00b und fange auch gerade erst an, mich mit diesem Stoff zu beschäftigen.
Desto mehr ich weiß, desto besser wird mein kleines CGI-Script schließlich werden (siehe anderer Thread)

Wenn man den "HTTP-Get" Befehl mit dem "buffer" begrenzt, dann läd er doch immer wieder den "ersten Teil" runter.Oder verstehe ich da was an dem Prinzip falsch?
Wenn ich 5 Blöcke runterladen möchte, und die Procedure von Hroudtwolf inner For-Schleife 5 mal mache, dann fängt er dcch 5 mal NEU an...
Gr33tz
Tafkadasom2k5
P.S.: Wenn das völliger Murks ist, was ich hier schreibe und was meine Bedenken sind, dann klärt mich bitte auf-bin auf dem HTTP-Gebiet relaitver N00b und fange auch gerade erst an, mich mit diesem Stoff zu beschäftigen.
Desto mehr ich weiß, desto besser wird mein kleines CGI-Script schließlich werden (siehe anderer Thread)
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
hmm
so wie ich das jetzt verstanden habe, lade ich die daten mit receivenetworkdata() runter oder?
Weil ich dachte jetzt das sich die Daten bereits in meinem arbeitsspeicher befinden wenn NetworkClientEvent() 2 zurück gibt und ich sie dann mit ReceiveNetworkData() aus dem Arbeitsspeicher lade.
Aber schon mal danke für die Hilfe
so wie ich das jetzt verstanden habe, lade ich die daten mit receivenetworkdata() runter oder?
Weil ich dachte jetzt das sich die Daten bereits in meinem arbeitsspeicher befinden wenn NetworkClientEvent() 2 zurück gibt und ich sie dann mit ReceiveNetworkData() aus dem Arbeitsspeicher lade.
Aber schon mal danke für die Hilfe

kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
