Witam,
Czy ktoś z Państwa ma doświadczenie w strumieniowym przesyłaniu plików pomiędzy programami (client-server) za pomocą komponentów Indy (idTCP) ?
W oparciu o przykłady wykorzystania tych komponentów stworzyłem dotychczas coś takiego:

Server:

procedure TForm1.TCPServerAfterCommandHandler(ASender: TIdTCPServer;
  AThread: TIdPeerThread);
var
 Stream:TStream;
 JPG: TJpegImage;
 CommBlock: TCommBlock;
begin
 if not AThread.Terminated and AThread.Connection.Connected then
  begin
   AThread.Connection.ReadBuffer (CommBlock, SizeOf (CommBlock));
   if (CommBlock.Command = 'VIDEOCAST') then begin
    Stream:=TMemoryStream.Create;
    JPG:=TJpegImage.Create;
    try
    {-=-=-=-=-}
    JPG.Assign(Bitmap);
    JPG.CompressionQuality:=45;
    JPG.Compress;
    JPG.SaveToStream(Stream);
    {-=-=-=-=-}
     AThread.Connection.WriteStream(Stream,true,true);
    finally
     Stream.Free;
     JPG.Free;
   end;
  end;
 end;
end;

Client:

procedure TForm1.Button4Click(Sender: TObject);
var
 Stream: TMemoryStream;
 JPG: TJpegImage;
 CommBlock : TCommBlock;
begin
 JPG:=TJpegImage.Create;
 Stream:=TMemoryStream.Create;
 CommBlock.Command      := 'VIDEOCAST';
 CommBlock.MyUserName   := TCPClient.LocalName;
 CommBlock.Msg          := 'VIDEOCAST';
 CommBlock.ReceiverName := '';
 TCPClient.WriteBuffer(CommBlock, SizeOf (CommBlock), true);
 try
  TCPClient.ReadStream(Stream);
  Stream.Position:=0;
  JPG.LoadFromStream(Stream);   //* błąd w tej linijce *//
  PreviewImg.Picture.Assign(JPG);
 finally
  Stream.Free;
  JPG.Free;
 end;
end;

...i wygląda na to że wszystko jest OK, jednak kod zatrzymuje się poczas ładowania obrazu ze strumienia.
Czy ktoś z Państwa ma może gotowe rozwiązanie tego typu? Ew. proszę o nakierowanie na właściwą drogę ;-)

Pozdrowienia