![]() |
TCP Datei/Senden GetNamePath
Hallo zusammen,
Ich arbeite gerade daran Dateien über Lan und Internet zu verschicken dazu habe ich mir folgenden Code gezogen! Client
Delphi-Quellcode:
Server
procedure TFtClient.BtSendenClick(Sender: TObject);
var fs: TFileStream; begin if not OpenDialog1.Execute then exit; //erstmal besorgt man sich den Pfad der Datei, z.B. mit dem Standard Dialog TOpenDialog with TCPClient do begin fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen Connect; //und Verbindung herstellen try OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden try WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird} CloseWriteBuffer; except CancelWriteBuffer; raise; end; finally Disconnect; fs.Free; end; end; end;
Delphi-Quellcode:
Das funktioneirt auch soweit recht gut so lange ich nicht zu große Dateien verschicke!
procedure TFTServer.TCPServerExecute(AThread: TIdPeerThread);
var fs: TFileStream; SizeOfIncomingStream: integer; begin if not SaveDialog1.Execute then exit; fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive); with AThread.Connection do try SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen ReadStream(fs, SizeOfIncomingStream); //und übergeben finally Disconnect; fs.Free; end; end; Ansonten passiert in dem Programm einfach mal gar nichts oder es friert ein! Nun meine 2 Fragen. 1. Wie kann ich dem Server den Dateinamen übermitteln so das diesem im SaveDialog die Datei direkt mit richtiger Dateiendung angezeigt wird ? Geht das mit GetNamePath? Wenn ja wie muss ich das einbinden! 2. Ich würde gerne eine Art Statusanzeige haben. Habe es bereits mit der Prgressbar und den OnBegin und Onwork Ereignissen probiert. Ich erhalte zwar über
Delphi-Quellcode:
die Dateigröße aber das Problem besteht darin das das OnWork Ereignis
Progressbar1.Max := AworkCountMax;
Delphi-Quellcode:
gar nicht ausgelöst wird!
Progressbar1.Position := AworkCount;
Wie kann ich das beheben ? Schon mal danke im voraus bis denn Holger |
Re: TCP Datei/Senden GetNamePath
Ja ja, da sind wir schon 2!
Wäre ebenfalls für jeden Vorschlag dankbar! @wardz! |
Re: TCP Datei/Senden GetNamePath
Jetzt sind wir schon 3 :hello:
Ich hab genau das gleiche Problem, nur das bei mir auch noch eine Zugriffsverletzung auftritt, wenn ich zu große Dateien verschicken will. Habt ihr das auch mit dem Tutorial in der Code-Library gemacht? Gruß Christian |
Re: TCP Datei/Senden GetNamePath
Ja haben wir und mit der Fortschrittsanzeige für INDY - FTP mit onworkbegin und onwork, sehr seltsam diese Komponente! :|
|
Re: TCP Datei/Senden GetNamePath
Nabend.
Holger und ich haben die IdTCP-Kompos benutzt. "OnWork" funktioniert leider garnicht, und größere Dateien bereiten auch Probleme. :roll: Gruß Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz