Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi RIESEN-Dateitransfer mit Indy (https://www.delphipraxis.net/12756-riesen-dateitransfer-mit-indy.html)

ATwardz 3. Dez 2003 17:29


RIESEN-Dateitransfer mit Indy
 
Hi,

ich habe vor einiger Zeit schonmal ein Programm geschrieben mit welchem man Dateien versenden kann!
Das Problem was mir aufgefallen ist, ist das sich mit der Grösse der Datei die Geschwindigkeit stark abnimmt!
Während eine 3 Mb grosse Datei in 1 Sekunde verschickt wird(Lan), braucht eine 30 Mb Datei schon mindestens 1 Min obwohl sie nur ca 10 Sek brauchen dürfte und bei 100 Mb brauch ich vor einer halben Stunde nicht nachzuschauen! Noch grossere Dateien bräuchten vermutlich Tage!

Meine Frage ist nun, wie kann ich Dateien verschicken deren Grösse keine relevanz spielt!
- Vielleicht die Dateien zerstückeln und nachher weider zusammensetzen und wenn, wie mache ich das?
- Oder kann ich vielleicht was mit dem Pufferspeicher regeln?

Und noch eines am rande, obwohl ich mir hier alle Tuts/Beträge durchgelsen habe, bekomme ich keine Fortschrittsanzeige angezeigt obwohl ichg einen extra Thread verwende und ANTI-FREEZE

Hilfe wäre sehr nett!

DANKE

Stanlay Hanks 3. Dez 2003 17:41

Re: RIESEN-Dateitransfer mit Indy
 
Der Weihnachtsmann sagt
Hohoho...Ich hab ein Geschenkt für dich, das direkt aus der DP Suche kommt :xmas:


Geschenk :xmas:

Man liest sich, Rudolf, the red nos....ähmmm Stanlay :xmas:

ATwardz 3. Dez 2003 19:53

Re: RIESEN-Dateitransfer mit Indy
 
DANKE! :shock:

Wormid 3. Dez 2003 21:17

Re: RIESEN-Dateitransfer mit Indy
 
Sind die Übertragungszeiten nur in Deinem Programm so gigantisch, oder auch, wenn man sich die Files per Windows-Explorer über eine Freigabe zieht?
Falls du sowas noch nicht getestet hast, würde ich das vielleicht erstmal tun - ich kann mir nicht vorstellen, das das Splitten der Dateien eine Linderung der Schmerzen bringt!
Ich tippe eher auf ein Netzwerkproblem... falsche Paketgröße, Kollisionen oder ähnliches.

Gruß

Wormid

ATwardz 3. Dez 2003 21:46

Re: RIESEN-Dateitransfer mit Indy
 
ne ne , unter Windows klapp alles perfekt, ich denke ich weiss woran es liegt!
Die DAtei bleibt einfach im Speicher bis sie fertig übertragen worden ist! Da Indy einen Buffer von 32 Mb hab wir das dann eng! :shock:

Wormid 3. Dez 2003 22:05

Re: RIESEN-Dateitransfer mit Indy
 
Das heißt, der Client der die große Datei empfängt, fängt an rumzuswappen? (Swap = Auslagerungsdatei...)

Womit machst du das denn? Mit idTCPClient (bzw. Server), oder mit anderen Komponenten?

Gruß

Wormid


(Wenn es tatsächlich an dem Buffer von Indy liegt, dann revidiere ich meine Aussage aus dem letzten Post: Dann bringt es doch was, die Datei zu zerhacken. Man müsste sich nur ein bissel "Protokoll" einfallen lassen, die dem Client mitteilt, das jetzt ne Datei in Chunks kommt - aber ich zähle auf dich und vertraue dir voll und ganz, das du das auf die Reihe bekommst! :wink: )

ATwardz 4. Dez 2003 11:31

Re: RIESEN-Dateitransfer mit Indy
 
Ich benutze idTCPClient!

ICh habe es so geprüft das ich den Speicher auf 5 Mb reduziert habe und bingo nun braucht auch eine 3 Mb Datei länger!
Das mit dem zerstückeln ist schon irgendwie schei**e aber es müsste gehen wenn ich einfach vor dem eigentlichen Transfer die Packat grösse und anzahl schicke und dann an jedas packet eine ID anhänge!
Mein Problem wird eher sein das ich die Dateien erst auf die Festplatte auslagen muss und im nächsten Thread zusammensetzen muss!
Aber ich versuche es erstma!

Danke nochmals!

@wardz

scp 4. Dez 2003 12:35

Re: RIESEN-Dateitransfer mit Indy
 
Zitat:

Zitat von ATwardz
ne ne , unter Windows klapp alles perfekt, ich denke ich weiss woran es liegt!
Die DAtei bleibt einfach im Speicher bis sie fertig übertragen worden ist! Da Indy einen Buffer von 32 Mb hab wir das dann eng! :shock:

Hmmm.. also ich habe Indy 9.0.4 und dort schreibt er standardmässig immer 32 KB, löscht den Speicher, schreibt wieder 32KB usw. bis die komplette Datei verschickt wurde.
Siehe IdTCPConnection.pas ab Zeile 891.

Dieser Wert (32 KB) kann mit IdTCPClient1.SendBufferSize verändert werden.

Kamil 4. Dez 2003 12:36

Re: RIESEN-Dateitransfer mit Indy
 
Bin mir jetzt nicht ganz sicher, aber mit OpenWriteBuffer kannst du doch die Größe des Buffers bestimmen:

Zitat:

procedure OpenWriteBuffer(const AThreshhold: Integer);

Parameters

const AThreshhold: Integer = -1

Number of bytes to buffer before flushing data in the write buffer to the peer. Default value is -1.
Delphi-Quellcode:
    OpenWriteBuffer(5*1024*1024); //5mb
    try;
      WriteStream(AStream);
      // Close the write buffer and have Indy now transmit it
      CloseWriteBuffer;
    except
      // Clear what we had buffered, and disable write buffering
      CancelWriteBuffer;
      // Re-raise the exception so it is not masked
      raise;
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz