Hola jplj,
La verdad es que entiendo bien lo que planteas.
Lo que puedes hacer es enviar un paquete al servidor, que este lo interprete y retorne otro paquete al cliente.
En Indy9, una de las estructuras lógica para hacerlo sería esta:
Servidor:
Código Delphi
[-]
procedure TConexiones.idTCPServer(AThread: TIdPeerThread);
var
aStream:TMemoryStream;
begin
try
if not AThread.Terminated and AThread.Connection.Connected then
begin
aStream := TMemoryStream.Create;
AThread.Connection.ReadStream(aStream,-1,false);
aThread.Connection.OpenWriteBuffer;
aThread.Connection.WriteStream(aStream,true,true,aStream.Size);
aThread.Connection.CloseWriteBuffer;
FreeAndNil(aStream);
Except;
end;
Estructura Cliente:
Código Delphi
[-]
TCPClient.WriteStream(aStream,true,true,aStream.Size); fTCPClient.ReadStream(fmsStream,-1);
Espero que te ayude.
Un saludo.