Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Datentransfer (https://www.delphipraxis.net/12985-indy-datentransfer.html)

SeEk0rN 8. Dez 2003 16:16


Indy Datentransfer
 
Nunja, da es ja nun Probleme mit den normalen Sockets gab, bin ich auf Indy umgestiegen.


Ich benutze den Code: http://www.delphipraxis.net/internal...ct.php?t=10179


Allerdings wollte ich nun auch ne Progressbar einbauen in OnWork des Clients, aber es wird nicht ausgeführt? Jemand ne Idee wieso oder wie ich anders ne Art Status einbau?

DataCool 10. Dez 2003 00:31

Re: Indy Datentransfer
 
Hi,

erstmal muss ich zu dem oben genanntem Code folgenden Hinweis geben :

!!! Der funktioniert nur bei Daten bis ca. 80 MB, sonst ist der WriteBuffer zu klein und er kann auch keinen Buffer mehr allocieren !!!
!!! Aber ca. 50 MB wird das schreiben in den Buffer schon sehr langsam !!!!

Deshalb empfehle ich jedem der größere Daten übertragen will, die Daten in kleinere Pakete aufzuteilen.
Ich persönlich verwende 20 KB Pakete und kann dann auch im Server eine schöne Progressbar bauen.

Beim Client sollte das OnWork Ereignis eintreten !!!!!!!!!!!!!!!!

Gruß Data

edi-design 10. Dez 2003 16:56

Re: Indy Datentransfer
 
hi leutz

hat mittlerweile jemand eine lösung für das prob mit der progressbar gefunden ich rkeigs leider auch net hin *schäm*
hat jemand zufällig nen code??

cu andré

DataCool 10. Dez 2003 17:03

Re: Indy Datentransfer
 
Hi,

poste mal Deinen Sourcecode vom Client !!

Einmal den Teil des Senden und Dein OnWork Ereignis !!

Wie gesagt ich habe das mit ner Progressbar am laufen, egal welchen Weg !!

Gruß Data

edi-design 10. Dez 2003 20:07

Re: Indy Datentransfer
 
Delphi-Quellcode:
procedure Tfile_send.TCPClientWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
progress.Position := AWorkCount;
l_out.Caption := inttostr(AWorkCount);
end;

procedure Tfile_send.TCPClientWorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
progress.Max := AWorkCountMax;
//l_out.Caption := inttostr(AworkCountMax);
end;

procedure Tfile_send.TCPClientWorkEnd(Sender: TObject;
  AWorkMode: TWorkMode);
begin
//progress.Position := 0;
end;
die onwork/begin/end ereignisse

und mein client:

Delphi-Quellcode:
procedure Tfile_send.pb_sendClick(Sender: TObject);
var
fs: tfilestream;
begin

  TCPClient.Host := e_host.Text;
  TCPClient.Port := strtoint(e_port.Text);

  if not Open.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(Open.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
    Connect; //und Verbindung herstellen
    try
      OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
      try
        WriteLn(Open.FileName);
        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;
ich hoffe du kannst mir helfen

cu andré


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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-2025 by Thomas Breitkreuz