Hallo,
ich übertrage eine Datei über Lan mit Indy TCP.
Hier der Quellcode:
Client:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| with IdTCPClient do begin Connect; WriteLn('GET:' + Listbox1.Items[Listbox1.itemindex]); ftmpStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + '\files\' + Listbox1.Items[Listbox1.itemindex],fmCreate); fsize := ReadInteger; ReadStream(fTmpStream,fsize); FreeAndNil(fTmpStream); Disconnect; end; |
Server:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| fStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + '\files\' + sAction,fmOpenRead + fmShareDenyNone); AThread.Connection.OpenWriteBuffer; AThread.Connection.WriteStream(fStream,true,true,0); AThread.Connection.CloseWriteBuffer; FreeAndNil(fStream); AThread.Connection.Disconnect; |
Dies funktioniert auch , solange ich kleinere Dateien (1,5-2KB) übertrage.
Doch bei größeren Dateien (50MB) hängt sich der Client auf und muss mit dem Taskmanager beendet werden. Dies liegt nicht an der Übertragungsdauer, da nach mehreren Minuten immer noch 0Byte in die Zieldatei geschrieben waren.
Ich habe die Vermutung, dass dies daran liegt, dass der fsize-Wert nur bis 2 Mio. geht.
Wie kann ich dieses Problem beheben?
PS: Ist es möglich, beim Download eine Statusanzeige zu erstellen?
Danke
Markus