Einzelnen Beitrag anzeigen

HenryX14

Registriert seit: 12. Mär 2003
19 Beiträge
 
#1

Indy TCP/IP-Komponente: BytesSent/BytesReceived..?

  Alt 17. Mär 2003, 19:11
Hallo,

Folgende Frage: Ich übertrage eine Datei mit Hilfe der TCP Komponente von Indy. Jetzt will ich da aber auch irgendeine art Statusanzeige haben, wie weit die Dateiübertragung fortgeschritten ist. Also: Wie kriege ich heraus wieviel Bytes übertragen worden sind und woher weiss der Empfänger wie groß die Datei ist?

Hier die Programmzeilen:

Server: (Empfänger)
Delphi-Quellcode:
unit uServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, IdBaseComponent, IdComponent,
  IdTCPServer;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
idtcpserver1.Active := true;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
idtcpserver1.Active := false;
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  stream: TFileStream;
begin
if FileExists('C:\test.jpg') then
        DeleteFile('C:\test.jpg');
    Stream := TFileStream.Create('C:\test.jpg',fmCreate);
    while Athread.Connection.Connected do
        Athread.Connection.ReadStream(Stream,-1,true);
    FreeAndNil(Stream);
end;

end.
Und Hier der Client: (Sender)
Delphi-Quellcode:
unit uClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  StdCtrls;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  stream: TFileStream;
begin
idTCPClient1.Connect(1000);
Stream := TFileStream.Create('C:\Dokumente und Einstellungen\HenryB\Eigene Dateien\Eigene Bilder\Danielfrage.jpg',fmOpenRead   + fmShareDenyNone);
idTCPClient1.OpenWriteBuffer;
idTCPClient1.WriteStream(Stream);
idTCPClient1.CloseWriteBuffer;
FreeAndNil(Stream);
idtcpclient1.Disconnect;
end;

end.
Vielen Dank schonmal im vorraus!
  Mit Zitat antworten Zitat