AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SendStream + Fortschrittsanzeige
Thema durchsuchen
Ansicht
Themen-Optionen

SendStream + Fortschrittsanzeige

Ein Thema von Real_Thunder · begonnen am 13. Jun 2006 · letzter Beitrag vom 5. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#1

SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:10
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#3

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:24
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:28
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.?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#5

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:45
Schade auf mein haupt, ich dnke ich sollte mal lieber Schlafen gehen........

Man kann die Werte ja auch einfach Addieren...

  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 15:59
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#7

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 17:00
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
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#8

Re: SendStream + Fortschrittsanzeige

  Alt 13. Jun 2006, 23:59
Noch Irgendjemand wach, der mir Helfen Könnte ?

Die Fortschrittsanzeige beim Empfangen Läuft....

Bei der Für das Senden, habe ich keinen Anhaltspunkt
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#9

Re: SendStream + Fortschrittsanzeige

  Alt 21. Jun 2006, 20:48
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: SendStream + Fortschrittsanzeige

  Alt 21. Jun 2006, 22:50
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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