2011-12-28 12 views
6

¿Cómo obtener la velocidad actual del ancho de banda con IdTCPServer o IdTCPClient?¿Cómo obtener la velocidad de ancho de banda (descarga) actual?

Quiero saber, ¿qué tan rápido el cliente está descargando datos del servidor?

ej .: velocidad de descarga: 450 kbps

+3

No coloque la información de la etiqueta en el título de su pregunta. En primer lugar, anula el objetivo de las etiquetas y hace que el tema de la pregunta sea más largo y difícil de leer. Además, cuando usa algo como Indy, donde existen grandes diferencias entre las versiones, ayuda si incluye qué versión de los componentes está usando. Gracias. –

Respuesta

9

de montacargas para asignar a la OnWorkBegin, OnWork y OnWorkEnd acontecimientos del objeto de la conexión TIdTCPConnection. El evento OnWorkBegin tiene un parámetro AWorkCountMax que le proporciona los bytes esperados totales que se transfieren (si se conocen con anterioridad). El evento OnWork tiene un parámetro AWorkCount que le proporciona un total acumulado de cuántos bytes se han transferido realmente desde que se desencadenó el evento OnWorkBegin.

Cada vez que se dispara el evento OnWork, restar el valor anterior AWorkCount partir del valor actual AWorkCount para determinar cuántos bytes se han transferido entre los dos eventos, y luego dividir ese valor por la cantidad de tiempo que ha transcurrido entre los dos eventos. Con ese valor final, puede calcular b/seg, kb/seg, mb/seg, etc. según sea necesario.

Dependiendo de cómo exactamente va a enviar/recibir los datos, puede que tenga que llamar manualmente los métodos BeginWork() y EndWork() de TIdTCPConnection para obtener los eventos OnWork... a empezar a disparar. La mayoría de los métodos de lectura/escritura de Indy no se llaman internamente al Begin/EndWork().

Cuestiones relacionadas