Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как измерить скорость закачки? 
V
    Опции темы
Pentium02
Дата 19.6.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



Собственно как измерить скорость закачки? Как я понимаю надо измерить скоко байт за секунду скачано, так? (ток чёт не пойму как реализовать) Качаю в цикле всем известным способом. И ещё как это вывести в отдельный поток? чтоб интерфейс проги не тормозил

Код

function TMainForm.DownloadFile(URLd, OutFile: string): Boolean;
var
  F: File;
  ResumePos,BufferLen: DWORD;
  hSession, hURL: HInternet;
  Buffer: array[1..512] of Byte;
  err: boolean;
  sfs: integer;

  function GetInetFileSize(Const AURL: String): Integer;
  var
    HSession, HFile: HInternet;
    Buffer: array [1..20] of Char;
    BufferLen, Index: Cardinal;
  begin
    Result := 0;
    HSession := InternetOpen(NIL, INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
    If Assigned(HSession) Then Begin
      HFile := InternetOpenURL(HSession, PChar(AURL), NIL, 0, INTERNET_FLAG_RELOAD, 0);
    Index := 0;
    BufferLen := 20;
    If HttpQueryInfo(HFile, HTTP_QUERY_CONTENT_LENGTH, @Buffer, BufferLen, Index) Then
      Result := StrToInt(StrPas(@Buffer));
    InternetCloseHandle(HFile);
    InternetCloseHandle(Hsession);
    End;
  End;
begin
  ResumePos:=0;
  AssignFile(F,OutFile);
  if FileExists(OutFile) then
    begin
      Reset(f,1);
      ResumePos:=FileSize(F);
      Seek(F, FileSize(F));
    end else ReWrite(f,1);
  NADO:= TRUE;
  hSession:= InternetOpen('p02downloader',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
  hURL := InternetOpenURL(hSession,PChar(URLd),nil,0,0,0);
  sfs:= GetInetFileSize(URLd); //получаю размер файла
  if ResumePos>0 then
    InternetSetFilePointer(hURL,ResumePos,nil,0,0);
  repeat
    err:= InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen);
    IF err= false then
      begin
        ShowMessage ('Произошел облом :(');
        exit;
      end;
    BlockWrite(f, Buffer, BufferLen);
    Application.Processmessages;
  until (BufferLen= 0) Or (NADO= FALSE); Result:=True; CloseFile(f);
end;


Это сообщение отредактировал(а) Pentium02 - 19.6.2007, 20:13
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 19.6.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Pentium02 @  19.6.2007,  20:12 Найти цитируемый пост)
 IF err= false then

простите, но LOL!

Цитата(Pentium02 @  19.6.2007,  20:12 Найти цитируемый пост)
until (BufferLen= 0) Or (NADO= FALSE); Result:=True; CloseFile(f);

жэсть! кто ж так писать научил????

Это сообщение отредактировал(а) MetalFan - 19.6.2007, 20:58


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Pentium02
Дата 19.6.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



Дык это не я писал))) пример был откудато взят) я просто не стал заморачиваться
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 19.6.2007, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



ну ладно. по делу:
запоминаешь время (GetTickCount например) перед началом закачки.
потом "читаешь" файл из инета кусками по N Mb/Kb/b. 
ну и скорость соотв высчитываешь


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Pentium02
Дата 20.6.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



А можно плз на примере?
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 20.6.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Pentium02 @  20.6.2007,  15:19 Найти цитируемый пост)
А можно плз на примере? 

а самому подумать? smile

примерно как-то так:
Код

function GetInetFileSize(Const AURL: String): Integer;
var
  HSession, HFile: HInternet;
  Buffer: array [1..20] of Char;
  BufferLen, Index: Cardinal;
begin
  Result := 0;
  HSession := InternetOpen(NIL, INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
  If Assigned(HSession) Then
  Begin
    HFile := InternetOpenURL(HSession, PChar(AURL), NIL, 0, INTERNET_FLAG_RELOAD, 0);
    Index := 0;
    BufferLen := 20;
    If HttpQueryInfo(HFile, HTTP_QUERY_CONTENT_LENGTH, @Buffer, BufferLen, Index) Then
      Result := StrToInt(StrPas(@Buffer));
    InternetCloseHandle(HFile);
    InternetCloseHandle(Hsession);
  End;
End;


function DownloadFile(URLd, OutFile: string): Boolean;
var
  F: File;
  ResumePos,BufferLen: DWORD;
  hSession, hURL: HInternet;
  Buffer: array[1..512] of Byte;
  lOk: boolean;
  lSize: integer;
  //
  lDownloadedSize: Cardinal;
  lStartTime: Cardinal;
  lSpeed: Integer;
begin
  ResumePos:=0;
  AssignFile(F,OutFile);
  try
    if FileExists(OutFile) then
    begin
      Reset(f,1);
      ResumePos:=FileSize(F);
      Seek( F, FileSize(F) );
    end
    else
      ReWrite( f, 1 );
    hSession:= InternetOpen('p02downloader',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
    hURL := InternetOpenURL(hSession,PChar(URLd),nil,0,0,0);
    try
      //lSize:= GetInetFileSize(URLd); //получаю размер файла
      if ResumePos > 0  then
        InternetSetFilePointer(hURL,ResumePos,nil,0,0);
      lStartTime := GetTickCount;
      lDownloadedSize := 0;
      repeat
        IF not InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen) then
          begin
            //ShowMessage ('Произошел облом :(');
            exit;
          end;

        BlockWrite(f, Buffer, BufferLen);

        inc( lDownloadedSize, BufferLen );
        lSpeed := lDownloadedSize / ((GetTickCount - lStartTime) * 1000) div 1024; //kB per sec
        //Application.Processmessages;
      until (BufferLen= 0);
      Result:=True;
    finally
      InternetCloseHandle( hSession );
      InternetCloseHandle( hURL );
    end;
  finally
    CloseFile(f);
  end;
end;

дальше сам придумывай

Это сообщение отредактировал(а) MetalFan - 20.6.2007, 17:29


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Pentium02
Дата 22.6.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



спасибо)
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 22.6.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Pentium02, да на здоровье) если помогло - с тебя плюсик smile


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.