Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Transfer von Daten mit Pause bzw. Abbrech Button (https://www.delphipraxis.net/56073-transfer-von-daten-mit-pause-bzw-abbrech-button.html)

bladecs 31. Okt 2005 18:50


Transfer von Daten mit Pause bzw. Abbrech Button
 
Ich suche nach einer Möglichkeit, Daten über ein TServersocket an einen TClientsocket zu versenden. Man sollte jedoch zudem die Mögl. haben, den Transfer zu "pausieren" und abzubrechen.

Thx im Voraus

Master_RC 31. Okt 2005 19:02

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Datei verschicken wurde grade gelöst :D
http://www.delphipraxis.net/internal...ct.php?t=66969

Mit nem Abbrechen-Button weiß ich leider nicht...
gut wär auch noch ein fortschrittsbalken :)

bladecs 31. Okt 2005 19:10

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Das verschicken ist ja kein Problem, nur ich weiß nicht, wie ich den Transfer abbrechen oder pausieren kann. (Über TServersocket & Tclientsocket)

St.Pauli 31. Okt 2005 19:24

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Mit der Lösung vom Swissdelphicenter:

Delphi-Quellcode:
var
  Form1: TForm1;
  Abbruch : boolean;

implementation

{$R *.dfm}

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
begin
  iLen := Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    IF Abbruch THEN exit;
    Socket.ReceiveBuf(Bfr^, iLen);
    FStream.Write(Bfr^, iLen);
  finally
    FreeMem(Bfr);
  end;
end;
und dann noch auf einen Button legen "Abbruch := True"...

Master_RC 31. Okt 2005 19:39

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Danke, werds so früh wie möglich ausprobieren!
(Wobei beim SDCenter ja eigentlich klar sein sollte, dass es funzt ;) )

St.Pauli 31. Okt 2005 19:46

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Müsste klappen, wenn nicht erst nochmal mit

Delphi-Quellcode:
var
  Abbruch : boolean = False;
probieren - ich weiss nämlich nicht, ob Boolean-Variabeln beim Start True oder False sind. :wink:

bladecs 31. Okt 2005 22:07

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Ich will, dass ich die Dateiübertragung des Servers pausieren/stoppen kann.
Also wenn ich eine Datei vom Server zum Client schicke, möchte ich nicht nur, dass der Client sie nicht annimmt, sondern dass der Server wartet bis der Client wieder bereit ist und erst dann weiter sendet.

Bei eurem Beispiel nimmt er die Daten nur nicht an:

Code:
IF Abbruch THEN exit;
    Socket.ReceiveBuf(Bfr^, iLen);

Net7 31. Okt 2005 22:16

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Zitat:

Zitat von bladecs
Ich will, dass ich die Dateiübertragung des Servers pausieren/stoppen kann.
Also wenn ich eine Datei vom Server zum Client schicke, möchte ich nicht nur, dass der Client sie nicht annimmt, sondern dass der Server wartet bis der Client wieder bereit ist und erst dann weiter sendet.

Bei eurem Beispiel nimmt er die Daten nur nicht an:

Code:
IF Abbruch THEN exit;
    Socket.ReceiveBuf(Bfr^, iLen);


Das ist richtig, und das soll auch so sein. Stell dir den Socketbuffer wie ein Briefkasten vor. Wenn du nix abholst, füllt sich der Briefkasten eben, solange bis er überläuft (DOS ähhm Spam -Attacke :mrgreen: ), oder du deine Briefe komplett abholst.

So funzt das auch mit den Sockets, die werden solange gefüllt bis der Client fertig ist mit senden.

Solange du nix ausließt bleibt alles im Socket. Bis du wieder Socket.ReceiveBuf(Bfr^,iLen); aufrufst.

bladecs 1. Nov 2005 14:38

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
thx, nur wie kann ich das Versenden der Datei abbrechen, ohne die Verbindung zu schließen.

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Socket.SendStream(TFileStream.Create('c:\datei.exe', fmOpenRead or fmShareDenyWrite)); // Diesen Transfer möchte ich abbrechen können, ohne die Verbindung zum client zu schließen bzw. den Server zu schließen (also der Server soll die Datei erst gar nicht weiter schicken)
end;

Net7 1. Nov 2005 15:09

Re: Transfer von Daten mit Pause bzw. Abbrech Button
 
Zitat:

Zitat von bladecs
thx, nur wie kann ich das Versenden der Datei abbrechen, ohne die Verbindung zu schließen.

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Socket.SendStream(TFileStream.Create('c:\datei.exe', fmOpenRead or fmShareDenyWrite)); // Diesen Transfer möchte ich abbrechen können, ohne die Verbindung zum client zu schließen bzw. den Server zu schließen (also der Server soll die Datei erst gar nicht weiter schicken)
end;


Joa gute frage.. dazu müstes aber diese Procedure anpassen.

Ich würde zb. das mit Write (Methode von TWinSocketStream)versuchen. Man stückelt die Größe des Streams
und schickt zb. immer nur 1 kb.

Dann wird abgefragt ob der User "Stopp den Transfer" gedrückt hat, wenn nicht wieder 1 Kb usw.

Wenn der User abbricht, wird eine Nachricht an den Client verschickt.

Siehe dir mal das Beispiel bei Write(Methode von TWinSocketStream) an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Seite 1 von 2  1 2      

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