Ver Mensaje Individual
  #2  
Antiguo 13-08-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.739
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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
   {Tamano de Paquete}
   ComponenteIndy.BufferSize := 1024;
   {Cantidad Máxima de Paquetes por Segundo}
   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
      {No hacer nada, pues me pasé del ancho de banda}
      Application.ProccessMessage;
   end;
end;

Última edición por duilioisola fecha: 13-08-2008 a las 11:51:10.
Responder Con Cita