Para empezar : No conozco los componentes Indy en profundidad.
Supongo que tendrías que hacer algo para que se envíe un paquete y se quede esperando un tiempo para enviar el siguiente.
Si cada paquete es de 1KB y quieres enviar a 1KB/seg, deberás enviar ese paquete y mantenerte esperando durante 1 segundo, antes de seguir enviando los siguientes.
Si quieres enviar a 4KB/s, deberás contar cuantos paquetes has enviado en el último segundo y quedarte en espera cuando llegues a 4.
Por ejemplo:
agregas una variable global, que cuente paquetes y otra que especifique la cantidad máxima de paquetes por segundo.
Código Delphi
[-]
var
Paquetes : integer;
MaxPaquetes : integer;
Código Delphi
[-]
procedure TForm1.Create(Sender : TObject)
begin
ComponenteIndy.BufferSize := 1024;
MaxPaquetes := 4;
end;
agregas un Timer con 1 segundo de intervalo.
Código Delphi
[-]procedure TForm1.Timer1Timer(Sender: TObject);
begin
Paquetes := 0;
end;
En el proceso que envía paquetes:
Código Delphi
[-]procedure OnIndyEnvioDePaquete
begin
while (buffer_esté_lleno) and (Paquetes>MaxPaquetes) do
begin
Application.ProccessMessage;
end;
end;