Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SendStream + Fortschrittsanzeige (https://www.delphipraxis.net/71342-sendstream-fortschrittsanzeige.html)

Real_Thunder 13. Jun 2006 15:06


SendStream + Fortschrittsanzeige
 
Hallo, ich habe eine Frage....

Vorweg, habe schon gesucht.. abr Irgendwie icht Wirklich fündig geworden

Also wie kann ich die anzahl der Bytes auslesen, die gesendet BZW Emfangen wurden ?

Hintergrund ist das ich eine Fortschrittsanzeige machen Möchte, die Dateigröße lasse ich mich Auslesen (in Bytes) und übertrage diese dann auch an die Gegenstelle

nun soll während der Übertragung die Anzahl der Bytes ausgelesen werden.

SirThornberry 13. Jun 2006 15:10

Re: SendStream + Fortschrittsanzeige
 
könntest du noch ein paar mehr Infos angeben? Zum Beispiel mit welchen Komponenten du sendest, welche Methoden oder Events der Komponente du dazu benutzt etc.

Real_Thunder 13. Jun 2006 15:24

Re: SendStream + Fortschrittsanzeige
 
Sorry.. hier ein Paar infos


Also ich benutze TClientSocket und TServerSocket

Die Datei Empfange ich mit

Delphi-Quellcode:
procedure TMsg_Haupt_Form.File_Get_Procedure (sender:TObject; abs:TCustomWinSocket); // On read Ereignis
var
  iLen: Integer;
  Bfr: Pointer;
begin
  file_fenster[find_file_fenster_by_socket(Integer(abs))].current_status.Caption:= 'Empfange...';
  iLen := abs.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    abs.ReceiveBuf(Bfr^, iLen);
    FStream.Write(Bfr^, iLen);
  finally
    file_fenster[find_file_fenster_by_socket(Integer(abs))].current_status.Caption:= IntToStr(gesLen);
    FreeMem(Bfr);
  end;
end;

Ich Sende mit:

Delphi-Quellcode:
procedure Tmsg_haupt_form.datei_verbunden(Sender: TObject; Socket: TCustomWinSocket);
begin
  Debugger.RichEdit1.Lines.Add('Verbunden zu '+ Socket.RemoteHost);
  Socket.SendStream(TFileStream.Create(selected_file, fmOpenRead or fmShareDenyWrite));
end;

MfG Real_Thunder

SirThornberry 13. Jun 2006 15:28

Re: SendStream + Fortschrittsanzeige
 
du weißt doch wieviel Bytes du aus dem Stream lädst bzw. wieviel darein geschrieben wurden. Oder suchst du die Anzahl an Bytes inklusive der des Protokolls etc.?

Real_Thunder 13. Jun 2006 15:45

Re: SendStream + Fortschrittsanzeige
 
Schade auf mein haupt, ich dnke ich sollte mal lieber Schlafen gehen........

Man kann die Werte ja auch einfach Addieren...

:wall: :wall: :wall: :wall:

SirThornberry 13. Jun 2006 15:59

Re: SendStream + Fortschrittsanzeige
 
ich hab mal eine Klasse geschrieben welche dir das abnimmt (abgeleitet von TFileStream):
Delphi-Quellcode:
[...]
type
  TStreamTransferEvnt = procedure(Sender: TStream; AMethodRes: LongInt) of Object;

  TFileStreamEx = class(TMemoryStream)
  private
    fBytesRead  : LongInt;
    fBytesWritten: LongInt;
    fOnRead     : TStreamTransferEvnt;
    fOnWritten  : TStreamTransferEvnt;
  public
    property BytesRead: LongInt read fBytesRead;
    property BytesWritten: LongInt read fBytesWritten;

    property OnRead: TStreamTransferEvnt read fOnRead write fOnRead;
    property OnWritten: TStreamTransferEvnt read fOnWritten write fOnWritten;

    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    procedure ResetBytesRead;
    procedure ResetBytesWritten;
  end;

implementation


function TFileStreamEx.Read(var Buffer; Count: Longint): Longint;
begin
  result := inherited Read(Buffer, Count);
  inc(fBytesRead, result);
  if Assigned(fOnRead) then
    fOnRead(Self, result);
end;

function TFileStreamEx.Write(const Buffer; Count: Longint): Longint;
begin
  result := inherited Write(Buffer, Count);
  inc(fBytesWritten, result);
  if Assigned(fOnWritten) then
    fOnWritten(Self, result);
end;

procedure TFileStreamEx.ResetBytesRead;
begin
  fBytesRead := 0;
end;

procedure TFileStreamEx.ResetBytesWritten;
begin
  fBytesWritten := 0;
end;

[...]
Nützlich ist so etwas wenn man zum Beispiel die Indys nutzt da man dort im OnWork nur bedingte Kontrolle hat wieviel des Streams bereits geschrieben/gelesen wurde.

Real_Thunder 13. Jun 2006 17:00

Re: SendStream + Fortschrittsanzeige
 
Ich verstehe die classe nicht, bzw ich Habe keine Ahnung, wie ich diese Einbinden Soll, bzw Nutzen

Bin noch delphi Anfänger...

Das mit dem Empfangen Bytes Zählne hab ich nun Prima Hinbekommen

Bloß mit den gesenden nicht..

Kannst du mir verraten wie ich deine Klasse einbinden Bzw Nutzen kann ?


MfG Real Thunder

Real_Thunder 13. Jun 2006 23:59

Re: SendStream + Fortschrittsanzeige
 
Noch Irgendjemand wach, der mir Helfen Könnte ?

Die Fortschrittsanzeige beim Empfangen Läuft....

Bei der Für das Senden, habe ich keinen Anhaltspunkt

Real_Thunder 21. Jun 2006 20:48

Re: SendStream + Fortschrittsanzeige
 
Jes´ns??? Könntest du mir die classe erklären ? was er wo macht ?? und iw eman sie einbindet ?

währe nett....

MfG Real Thunder

SirThornberry 21. Jun 2006 22:50

Re: SendStream + Fortschrittsanzeige
 
am besten du packst die Klasse in eine eigene Unit und bindest diese Unit dann ein. Anschließend benutzt du anstelle von TFileStream diese neue Klasse.
mit
Delphi-Quellcode:
procedure TYourForm.OnReadProc(Sender: TStream; AMethodRes: LongInt);
begin
  ShowMessage('Bisher gelesen (byte): ' + IntToStr(TFileStreamEx(Sender).BytesRead));
end;

[...]
TheStreamInstanzce.OnRead := OnReadProc;
kannst du bei jedem lesevorgang des Streams anzeigen lassen wieviel bisher gelesen wurde. (ShowMessage ist natürlich nicht das optimalste Beispiel)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 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