![]() |
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 |
Re: Transfer von Daten mit Pause bzw. Abbrech Button
Datei verschicken wurde grade gelöst :D
![]() Mit nem Abbrechen-Button weiß ich leider nicht... gut wär auch noch ein fortschrittsbalken :) |
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)
|
Re: Transfer von Daten mit Pause bzw. Abbrech Button
Mit der Lösung vom
![]()
Delphi-Quellcode:
und dann noch auf einen Button legen "Abbruch := True"...
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; |
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 ;) ) |
Re: Transfer von Daten mit Pause bzw. Abbrech Button
Müsste klappen, wenn nicht erst nochmal mit
Delphi-Quellcode:
probieren - ich weiss nämlich nicht, ob Boolean-Variabeln beim Start True oder False sind. :wink:
var
Abbruch : boolean = False; |
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); |
Re: Transfer von Daten mit Pause bzw. Abbrech Button
Zitat:
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. |
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; |
Re: Transfer von Daten mit Pause bzw. Abbrech Button
Zitat:
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 07:36 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