Download Problem...
Übersicht

![]() |
FobsiBetreff: Download Problem... |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi ich habe kürzlich für Kolegen die wirklich andauernd hilfe brauchen ein programm geschrieben welches mir helfen soll auf andare pcs zu gehen und sie zu "säubern" ![]() Download Function:(nicht meine) Code: [AUSKLAPPEN] Function LoadWebFile( srcFile$, dstFile$,BUFFER_SIZE )
Local TCPStream, tmpPos, dataSize, tmpBank Local Host$ = "", HTTPHeader$ = "" Local Buffer = BUFFER_SIZE If ( Left( srcFile$, 7 ) = "http://" ) srcFile$ = Right( srcFile$, Len( srcFile$ ) - 7 ) tmpPos = Instr( srcFile$, "/" ) If ( tmpPos ) Then Host$ = Left( srcFile$, tmpPos - 1 ) srcFile = Right( srcFile$, Len( srcFile ) - tmpPos + 1 ) Else Host$ = srcFile$ srcFile$ = "/" End If TCPStream = OpenTCPStream( Host$, 80 ) If ( Not TCPStream ) Then RuntimeError( "Fehler beim verbinden zu: " + Host$ ) End If WriteLine( TCPStream, "GET " + srcFile$ + " HTTP/1.1" ) WriteLine( TCPStream, "Host: " + Host$ ) WriteLine( TCPStream, "Accept: */*" ) WriteLine( TCPStream, Chr$( 10 ) ) Repeat HTTPHeader$ = ReadLine( TCPStream ) If ( Left( HTTPHeader$, 16 ) = "Content-Length: " ) Then dataSize = Right( HTTPHeader$, Len( HTTPHeader$ ) - 16 ) End If Until HTTPHeader$ = "" Or Eof( TCPStream ) If ( dataSize > 0 ) file = WriteFile( dstFile$ ) tmpBank = CreateBank( Buffer ) If ( Not file ) Then RuntimeError( "Fehler beim erstellen der Downloaddatei" ) End If bytesReaded = 0 Repeat bytesRemaind = dataSize - bytesReaded If ( bytesRemaind < BUFFER_SIZE ) Then Buffer = bytesRemaind End If s = ReadBytes( tmpBank, TCPStream, 0, Buffer ) WriteBytes( tmpBank, file, 0, s ) bytesReaded = bytesReaded + s Until s <> BUFFER_SIZE CloseFile( file ) CloseTCPStream( TCPStream ) FreeBank( tmpBank ) End If End Function hoffe könnt mir helfen ![]() lg Fobsi |
||
matze-t |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Fehler müsste doch eigentlich daran liegen, dass die zweite Schleife zu früh verlassen wird. Also bevor die Datei komplett übertragen wurde. Vllt liegt das daran, das ReadBytes aus irgendeinem Grund weniger als BUFFER_SIZE Bytes liefert auch wenn theoretisch noch mehr gelesen werden können.
Ersetz mal das Ende der zweiten Schleife durch diesen Code, um den Fehler auschließen zu können Code: [AUSKLAPPEN] Until bytesRemaind > 0
|
||
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh was hat das mit meinem Problem zutun? naja ich möchte nochmal beschreiben was ich meine:
1. Ich starte den Download per klick auf einen Botton. 2. Das Programm hört auf zu laufen bzw wird angehalten bis das programm heruntergeladen ist. und ich möchte das gerne so ändern das das programm ohne diesen MEGA Lag auskommt. hier das programm: >Hier< lg Fobsi |
||
matze-t |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ach Ok. Ich glaub jetzt hab ichs verstanden: Das Problem ist also, dass das Programm so lange anhält, bis die Datei übertragen ist und damit blockiert ist. Bitte korrigier mich, wenns das immer noch nicht trifft.
Um das zu erreichen, musst du ja mehrere Programmteile parallel laufen lassen. Einmal der Download im Hintergrund und das Hauptprogramm. Da man mit BlitzBasic keine Multi-Threading machen kann, wird das eher schwieriger. Ein Ansatz, der evtl funktionieren könnte: Du erstellst zwei Programme, also 2 .exe Dateien. Einmal der Downloader und das Hauptprogramm. Wenn etwas runter geladen werden soll, ruft das Hauptprogramm das Download-Programm auf. Das Problem ist nur, dass wenn du den Downloader mit ExecFile aufrufst, das Hauptprogramm auch angehalten wird. Du brauchst also einen Weg, ein anderes Programm aufzurufen, ohne das Hauptprogramm warten zu lassen. Das ist meines Wissens nur mit einer dll möglich. Zudem kommt dann noch das Problem, das der Downloader dem Hauptprogramm irgendwie mitteilen muss, wann die datei übertragen wurde. Ich glaub das einfachste wär, das Programm so zu lassen und einen Fortschrittsbalken anzuzeigen. Du kannst ja in der Download-Schleife den Fortschritt berechnen. Du wirst dann bloß eine Mischung aus Zeichen und Netzwerk-Befehlen kriegen, was den Quelltext evtl ziemlich unübersichtlich macht. Ich hoff ich konnte diesmal etwas mehr helfen, auch wenn ich keine konkrete Lösung hab. Ps.: Wie macht man eigentlich die Verlinkungen auf Befehle? |
||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
[[ Befehl ]*]
Viel einfacher ist den wiederholenden Teil in deine Hauptschleife zu setzen: Das was momentan im Repeat-Until steht in eine Funktion eingliedern. Dabei an alle Variablen Denken. Evtl brauchst du Globale oder kannst noch eineige über Parameter an die funktion geben. Diese Funktion muss nun irgendwie zwischen das was gleichzeitig pasieren soll: BlitzBasic: [AUSKLAPPEN]
Die Funktion kann dann auch als rückgabewert true haben wenn der Download abgeschlossen ist usw. |
||
KaDuZa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oder man erstellt eine batch datei die auf den ftp server zugreift und die datei downloaded.
diese dann im code aufrufen. Ich weis nicht ob das gegebenfalls leistung des programmes frißt aber so könnte man es doch realisieren. Für korrigirungen wäre ich sehr dankbar |
||
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich könnte auch einfach eine Datei erstellen z.b: "link1.url" und diese dann ausführen jedoch kann ich es dann nicht automatisch starten wenn es runtergeladen ist..
lg Fobsi, und danke für alle Antworten! |
||
![]() |
faeX |
![]() Antworten mit Zitat ![]() |
---|---|---|
es ist ja lobenswert, dass du den pc von kollegen "säubern" willst ![]() aber soetwas nennt man auch "trojaner". wenn du deinen kollegen zumindest mal verklickern kannst das sie die datei ausführen sollst reicht auch diese lösung vollkommen ![]() |
||
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh nicht wirklich.... sie können mich sogar rauschmeisen ist ganz Simpel. Escape und ich bin drausen....
und die haben ja auch vertrauen zu mir naja jedenfals die meisten ![]() lg Fobsi |
||
KaDuZa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
für sowas würde ich lieber den guten alten 1337 style verwenden ![]() aber ich gehe jetz nicht weiter drauf ein wie ich das ganze lösen würde wenn ich mir zugriff verschaffen will, dafür reicht es einen server zu programmieren..... |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
KaDuZa hat Folgendes geschrieben: für sowas würde ich lieber den guten alten 1337 style verwenden
![]() aber ich gehe jetz nicht weiter drauf ein wie ich das ganze lösen würde wenn ich mir zugriff verschaffen will, dafür reicht es einen server zu programmieren..... ![]() |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zur Fernwartung gibts schon gute Lösungen:
VNC (Windows Liefert was ähnliches schon unter dem namen "Remote Desktop" mit) SSH (Muss unter Windows von einem Drittanbieter installiert werden) |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
wir sind etwas abgewichen vom eigentlichen Thema.
nochmals: Ist es möglich das ein Download das programm nicht anhält? ohne eine Wihle not Schleife... lg Skuribo |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das ginge dann aber auf Kosten der Downloadgeschwindigkeit. Und zwar in dem du den Download nicht in eine Funktion packst und die erst beendet wird, wenn der Download zu ende ist, sondern immer Häppchen aus dem Internet lädst, dann erstmal wieder die Hauptschleife aufführst, und dann das nächste Häppchen lädst. Solche Häppchen könnten zB 64 KB sein (mit ReadBytes![]() |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gehe ich richtig in der Annahme, dass du dir die Funktion einfach von irgendwo her kopiert hast, ohne zu wissen, wie sie funktioniert?
Ansonsten würde ich dir einfach empfehlen, die funktion so umzubauen, dass sie sich in einer hauptschleife integrieren lässt. (Bei jedem schleifendurchlauf nur 10 bytes lesen, etc) Grüße, Smily. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Smily das hab ich ja auch geschrieben:
Die Funktion ist nicht von mir.... naja gut werde mal bisschen rumprobieren danke lg Fobsi |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fobsi hat Folgendes geschrieben: Smily das hab ich ja auch geschrieben:
Die Funktion ist nicht von mir.... Ja, ich weis. Mir ging es darum, ob du die funktion kopiert und verstanden, oder nur kopiert hast. ![]() grüße, Smily |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kopiert und nicht verstanden naja die hälfte vieleicht....
lg Fobsi |
||
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mit ein wenig geschick koenntest du ueber die winapi einen download-prozess forken, der im hintergrund arbeitet...
edit: btw die einzige moeglichkeit, das wirklich simultan laufen zu lassen, da multi-tasking mit blitzbasic intern nicht moeglich ist. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group