Download Problem...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Fobsi

Betreff: Download Problem...

BeitragDo, Apr 23, 2009 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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" Laughing naja das klappt ja auch toll! aber wenn man den Download startet hält das ganze programm an. ist das normal oder wie kann man das umgehen? Ich denke es liegt an der Download Function

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 Very Happy

lg Fobsi
 

matze-t

BeitragDo, Apr 23, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Apr 24, 2009 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Apr 24, 2009 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Apr 25, 2009 1:25
Antworten mit Zitat
Benutzer-Profile anzeigen
[[ 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]

While Not KeyHit(1)
Runterladen(bla,blubb)
;irgendwas anderes
Flip
Cls
Wend


Die Funktion kann dann auch als rückgabewert true haben wenn der Download abgeschlossen ist usw.
 

KaDuZa

BeitragMo, Apr 27, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 28, 2009 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 28, 2009 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist ja lobenswert, dass du den pc von kollegen "säubern" willst Wink
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 Wink

Fobsi

BeitragDi, Apr 28, 2009 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing

lg Fobsi
 

KaDuZa

BeitragDi, Apr 28, 2009 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
für sowas würde ich lieber den guten alten 1337 style verwenden Very Happy
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

BeitragMi, Apr 29, 2009 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
KaDuZa hat Folgendes geschrieben:
für sowas würde ich lieber den guten alten 1337 style verwenden Very Happy
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.....


Question

Smily

BeitragMi, Apr 29, 2009 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 29, 2009 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

D2006

Administrator

BeitragMi, Apr 29, 2009 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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 laden!).
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

BeitragMi, Apr 29, 2009 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 29, 2009 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Smily das hab ich ja auch geschrieben:

Die Funktion ist nicht von mir....

naja gut werde mal bisschen rumprobieren danke

lg Fobsi

Smily

BeitragMi, Apr 29, 2009 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Wink

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

BeitragMi, Apr 29, 2009 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Kopiert und nicht verstanden naja die hälfte vieleicht....

lg Fobsi
 

konstantin

BeitragMi, Apr 29, 2009 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group