Качалка хороша, но при попытке качнуть "тело" html страницы по ссылке
(очень нужна была эта
http://openbox.ua/download.php?&get=OPENBOX-F300FTA/)
ВИСЯК проги был жесткий. Пришлось повышать свою грамотность в сокетных вопросах и... отлаживаться включая тело компоненты.
Ошибочка, хоть и элементарна, но имеется. Собственно похоже на то, что автор сделал Ctrl+V несколько выше нежели строка где должна собственно находиться :)...
Короче привожу ИСПРАВЛЕННЫЙ обработчик "сокет-приёмника" этой качалки с моими коментами, которые писались по ходу вникания.
Привожу немедленно, т.к. быть может кто то мучается именно сейчас, а
победа так близка ;) Успешного кодинга!
//-----------------------------------------------------
procedure THTTPDownload.On_Read( SocketMessage: TWMSocket );
var Ch: Char;
begin
while ( fSocket.Count > 0 ) do
if ( fSocket.ReadData( @Ch, 1 ) = 1 ) then
// анализируем прочитанные из сокета данные
begin
// Это пока заголовок, что с самого начала сеанса получаем???
if ( NOT fHdrAcct ) then
begin
// читаем и анализируем заголовки, т.к. флаг наличия заголовка не установлен (пока)
if ( Ch = #13 ) then // это признак конец текущей анализируемой строки?
begin
fSocket.ReadData( @Ch, 1 ); // #10
if fHdrStr = '' then // #13#10#13#10 - http header end
begin
fHdrAcct := TRUE; // заголовок обнаружен
AnalyzeHeader; // теперь его обработаем
Continue; // будем продолжать принимать данные из сокета
end;
fHdrList.Add( fHdrStr );// добавить запись
fHdrStr := ''; // обнулим содержание буферного накопителя
end
else
fHdrStr := fHdrStr + Ch;// побайтно набиваем накопитель...
end
else
begin
fDStream.Write( Ch, 1 );// читаем поток данных из сокета побайтно
fHdrStr := fHdrStr + Ch;// и побайтно суем в накопитель
Inc( fRecvCount ); // не забываем приращать их количество
end
end
// а вот если данные из сокета кончились, то генерим следующее событие
else
begin
if Assigned( fOnRecv ) then
fOnRecv( @Self, fRecvCount, fHeader.ContentLength );
EXIT;// гарантированно и обязательно выходим, не допуская "висяков"!
end;
end;
//-----------------------------------------------------