2011-12-28 12 views
6

Jak uzyskać prędkość bieżącego pasma używając IdTCPServer lub IdTCPClient?Jak uzyskać prędkość bieżącej przepustowości (pobierania)?

Chcę wiedzieć, jak szybko klient pobiera dane z serwera?

np .: prędkość pobierania: 450 kbps

+3

Proszę nie umieszczać informacji znacznika w tytule pytania. W pierwszej kolejności pokonuje cel posiadania tagów i sprawia, że ​​temat pytań jest dłuższy i trudniejszy do odczytania. Ponadto, gdy używasz czegoś takiego jak Indy, gdzie występują duże różnice między wersjami, pomocne jest uwzględnienie wersji używanych składników. Dzięki. –

Odpowiedz

9

Przypisywanie Wozy do OnWorkBegin, OnWork i OnWorkEnd zdarzenia połączenia za TIdTCPConnection obiektu. Zdarzenie OnWorkBegin ma parametr AWorkCountMax, który podaje łączną oczekiwaną liczbę bajtów (jeśli jest znana z wyprzedzeniem). Zdarzenie OnWork ma parametr AWorkCount, który daje bieżącą sumę liczby bajtów, które zostały faktycznie przesłane od zdarzenia OnWorkBegin.

Gdy zdarzenie OnWork jest zwolniony, odejmowanie poprzednią AWorkCount wartości od bieżącej wartości AWorkCount aby ustalić, jak wiele bajtów zostały przeniesione między tymi dwoma wydarzeniami, a następnie podzielić tę wartość przez ilość czasu, jaki upłynął między dwoma wydarzenia. Przy tej wartości końcowej można obliczyć b/s, kb/s, mb/s itd. W razie potrzeby.

zależności od tego, jak dokładnie wysyłania/odbierania danych, być może trzeba będzie ręcznie wywołać metody BeginWork() i EndWork() z TIdTCPConnection dostać wydarzenia OnWork... zacząć wypalanie. Większość metod odczytu/zapisu Indy'ego nie wywołuje wewnętrznie nazwy Begin/EndWork().