Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP Datei/Senden GetNamePath (https://www.delphipraxis.net/9350-tcp-datei-senden-getnamepath.html)

Holger 24. Sep 2003 16:14


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:
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;
Server
Delphi-Quellcode:
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;
Das funktioneirt auch soweit recht gut so lange ich nicht zu große Dateien verschicke!
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:
Progressbar1.Max := AworkCountMax;
die Dateigröße aber das Problem besteht darin das das OnWork Ereignis

Delphi-Quellcode:
Progressbar1.Position := AworkCount;
gar nicht ausgelöst wird!

Wie kann ich das beheben ?

Schon mal danke im voraus bis denn

Holger

ATwardz 24. Sep 2003 16:59

Re: TCP Datei/Senden GetNamePath
 
Ja ja, da sind wir schon 2!
Wäre ebenfalls für jeden Vorschlag dankbar!

@wardz!

Chris1986 24. Sep 2003 17:11

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

ATwardz 24. Sep 2003 19:25

Re: TCP Datei/Senden GetNamePath
 
Ja haben wir und mit der Fortschrittsanzeige für INDY - FTP mit onworkbegin und onwork, sehr seltsam diese Komponente! :|

Chris1986 24. Sep 2003 22:53

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 02:30 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