Entwickler-Ecke

Internet / Netzwerk - Dateien senden mit IdTCP Client / Server


DBZfan - Sa 31.05.03 09:50
Titel: Dateien senden mit IdTCP Client / Server
Hallo,
ich benutze den TCP Server / Client von Indy, um eine Datei zu senden. Die Datei wird vom Server zum Client per Stream übermittelt. Das Problem ist das der Client "einfriert" in der Zeit, wo die Datei übermittelt wird. Dieses darf aber nicht sein, weil das Prog später sehr viele Dateien übermitteln soll. Was kann man da machen, oder was mach ich falsch?

Quellcode vom Client:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  FStream: TFileStream;
begin
  FStream := TFileStream.Create('C:\test.zip', fmCreate);
  with Form1 do begin
    IdTCPClient1.Connect; // Verbindung aufbauen
    try
      IdTCPClient1.ReadStream(FStream, -1, True); // Stream empfangen
      FStream.Seek(0, soFromBeginning);
    finally
      IdTCPClient1.Disconnect; // Verbindung schließen
      FStream.Free; // Stream freigeben
    end;
  end;
end;


Quellcode vom Server:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  FStream: TFileStream;
begin
  FStream := TFileStream.Create('C:\test.dat', fmOpenRead);
  try
    AThread.Connection.OpenWriteBuffer;
    AThread.Connection.WriteStream(FStream);
    AThread.Connection.CloseWriteBuffer;
  finally
    AThread.Connection.Disconnect;
    FStream.Free;
  end;
end;


maxk - Sa 31.05.03 10:42

Ich mach er immer mit Strings (ich weiß, dass das sehr unsauber ist):

Daten in String lesen - String in Stream schreiben, wenn keine Daten -> Application.ProcessMessages;[/delphi]