unit MeineUnit;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent,
IdStreamVCL, IdComponent, IdTCPServer,IdTCPConnection,
IdTCPClient,IdContext;
var
TCPClient1: TIdTCPClient;
TCPServer1: TIdTCPServer;
procedure Start(port:integer);
procedure Stop();
procedure SendStream(Stream: TFilestream;Host:
String);
procedure ReceiveStream(Acontext:TidContext);
implementation
procedure Start(port:integer);
{
+Aktiviert TCPClient und TCPServer
+Sollte immer am Start des Programms aufgerufen werden.
+zuletzt editiert: 24.05.06
}
begin
TCPClient1:= TIdTCPClient.Create;
TCPClient1.Port:=Port;
with TCPClient1
do
begin
ReadTimeout:=5000;
ConnectTimeout:=5000;
end;
TCPServer1:= TIdTCPServer.Create;
@TCPServer1.OnExecute:=@ReceiveStream;
with TCPServer1
do
begin
MaxConnections:=1;
DefaultPort:=Port;
Active:=True;
end;
end;
procedure Stop();
{Stopt Server und Client, gibt Speicher frei.
zuletzt editiert: 24.06.05}
begin
TCPClient1.Free;
TCPServer1.Active:=False;
TCPServer1.Free;
end;
procedure SendStream(Stream: TFilestream;Host:
String);
{
+Versendet vom TCPClient an TCPServer einen Filestream
+Dieser wird als Parameter übergeben, und muss vorher erzeugt worden sein.
+zuletzt editiert: 24.05.06
}
var
IndyStream: TidStreamVCL;
begin
TCPClient1.Host:=Host;
try
IndyStream := TidStreamVCL.Create(Stream);
try
{ Senden }
with TCPClient1
do
begin
Connect;
try
Socket.
Write(IndyStream, 0, true);
finally
Disconnect;
end;
end;
finally
FreeAndNil(IndyStream);
end;
finally
FreeAndNil(Stream);
end;
end;
procedure ReceiveStream(Acontext:TidContext);
var
FSTream: TFileStream;
SizeOfIncomingStream: Integer;
IDS: TidStreamVCL;
begin
FStream := TFileStream.Create('
C:\test.tmp', fmCreate);
try
IDS := TidStreamVCL.Create(FStream);
try
{ Empfangen }
with AContext.connection
do
begin
try
SizeOfIncomingStream := Socket.ReadInteger;
Socket.ReadStream(IDS, SizeOfIncomingStream);
finally
Disconnect;
end;
end;
{ Damit der Inhalt von IDS in FStream übertragen wird }
IDS.VCLStream.Position := 0;
finally
FreeAndNil(IDS);
end;
finally
FreeAndNil(FStream);
end;
end;
end.