Hallo,
ich habe ein Programm geschrieben, dass Dateien übers Netz versendet und empfängt. Dazu verwende ich TIdTcpServer und TIdTcpClient von den
Indy 9 Komponenten. Das Programm fungiert sowohl als Client als auch als Server. Ich möchte jetzt zusätzlich eine Status-Anzeige in das Programm einbauen, um den Downloadfortschritt anzuzeigen. Dazu benutz ich das onWorkBegin und onWork - Ereignis der Client-Komponente. Leider wird die aus irgendwelchen Gründen nicht ausgeführt. Vielleicht könnt ihr mir helfen. Beim anfordern einer Datei mache ich folgendes im onCommand-Event des Server-Command-Handlers:
Delphi-Quellcode:
procedure TForm1.onCommand(ASender: TIdCommand);
var
fileid : TFileStream;
begin
fileid := TFileStream.create(asender.params.strings[0], fmOpenRead);
with asender.thread.connection do
begin
openwritebuffer;
writestream(fileid);
closewritebuffer;
disconnect;
end;
freeandnil(fileid);
end;
Im onConnect-Event des Clients mache ich folgendes:
Delphi-Quellcode:
procedure TForm1.onConnect(Sender : TObject);
var
fileid : TFileStream;
begin
fileid := TFileStream.create('C:\irgendwas.dat', fmCreate);
with TIdTcpClient(Sender) do
begin
sendCmd('getFile|d:\irgendwo.dat')
while connected do
readstream(fileid, -1, true);
end;
freeandnil(fileid);
end;
Die Übertragung funzt wunderbar und die Datei kommt komplett an. Nur leider wird onWork und onWorkBegin nicht ausgelöst. Woran könnte das liegen? Könnte es deswegen sein, weil ich bisher nur über das loopback-device
localhost getestet habe und somit gar keine richtige
TCP-Verbindung aufgebaut wird? Kann das im Moment leider nicht in einem richtigen Netz testen, wäre für antworten aber dankbar. Denn ich kann mir nicht vorstellen, dass es wirklich an
localhost liegt, oder weil server und client in einem programm laufen.
Dank schon mal im Voraus
MU