Einzelnen Beitrag anzeigen

Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#2
  Alt 2. Mai 2003, 12:26
ja, das geht. optimal ist es, wenn du zum senden einer datei(oder was auch immer du mit der verbindung vorhast) einen TFileStream benutzt.

das ganze müsste dann so ablaufen:
Delphi-Quellcode:
procedure TForm1.SocketRead(..)
var d,b:integer; s:string;
begin
// falls du deine daten nicht in dem OnRead-Event sendest, anpassen
d:=timetostr(StrToTime(GetToken(spd[0],'%',2))-StrToTime(formatDateTime('hh:mm:ss',now)));
if (d > 0) then begin
b:=filestream.size-StrToInt(GetToken(spd[0],'%',3));
// größe der datei - vorherige größe der datei (beim Empfangen von Daten)
if (d > 1) then b:=b div d;
s:='Speed: '+CalcBytes(b)+' kB/s';
// CalcBytes liefert die korrekte Größe + Einheit eines Bytewerts(als Integer) zurück, vorsicht: keine standart funktion
spd[0]:='erkennung%'+formatDateTime('hh:mm:ss',now)+'%'+inttostr(filestream.size);
end;
end;
Sobald du das Grundprinzip verstanden hast, wirst du es sicher angleichen können. Die Prozedur wurde übrigens für das Dateiempfangen geschrieben, wenn du Dateien versendest muss sie anders aussehen. spd[0] ist ein Array mit der Größe deiner Wahl, kommt darauf an wieviel Transfers du maximal gleichzeitig behandeln willst. Mit 'erkennung' meinte ich zB einen Komponentennamen, damit du den jeweiligen String auch den Socket-Komponenten zuweisen kannst, falls du diese dynamisch erstellst. Weiterhin musst du am Anfang der Prozedur den richtigen String aus dem Array wählen, damit du bei mehreren Transfers nicht immer den selben Speed anzeigst. Zu ende des transfers muss spd[x] natürlich wieder auf nil gesetzt werden..
Ich hoffe das hat geholfen..
  Mit Zitat antworten Zitat