![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
большой размер файла
anton773 © (2006-06-13 04:59:00)Здравствуйте! Создал свой закатчик файлов с возможностью докачки в случае обрыва связи.Все работает,но объём траффика на 30% больше размера скачанного файла.Почему? Использую Wininet.
Defunct (2006-06-16 02:06:00) [1]anton773 © (14.06.06 04:57) [5]
> Угадали.
Теоретически можно увеличить объем пакетов PPP протокола, тогда отношение полезного трафика к служебному увеличится. Если линия цифровая и сбоев в работе модема не наблюдается, можно повышать объем пакета до 2kb. К сожалению не могу подсказать где в Windows можно осущетсвить эту настройку (и возможно ли вообще).
> Если знаете подскажите что не так.Буду благодарен.
Подсказка - отсутствует форматирование, что приводит к:
- не просматривается алгоритм работы процедуры;
- усложняется чтение кода;
- усложняется поиск возможных ошибок.
anton773 (2006-06-14 04:57:00) [2]
> Часом не dialup соединение?
Угадали. А чем вам не нравиться Код? Я не претендую на корректность кода(новичок) Если знаете подскажите что не так.Буду благодарен.
Defunct (2006-06-14 04:22:00) [3]> Вот код
Код жуткий..
А по поводу избыточности.
TCP/IP - имеет строго фиксированный объем служебного трафика (т.е. чем больше будет суммарный объем пакета, тем больше будет процент полезных данных).
HTTP/FTP протоколы, которые над TCP имеют изменяющийся объем служебной информации.
30% служебной информации вероятно из-за того, что у вас используется мизерный объем пакетов (256-500 байт). Часом не dialup соединение?
anton773 (2006-06-13 21:13:00) [4]To Сергей я понимаю что объем траффика будет всегда больше размера скачанного файла но не на треть же! Вот код: procedure
TForm2.BitBtn1Click(Sender: TObject);
var
F: file;
Resumepos,Bufferlen,Sumsize :dword;
hSession,hUrl:Hinternet;
Buffer: array[1..1024] of byte;
err: boolean;
begin
Sumsize:=0; Resumepos:= 0;
AssignFile(F,Table1.FieldByName('filename').AsString);
if FileExists(Table1.FieldByName('filename').AsString) then
begin
Reset(f,1);
Resumepos:= FileSize(f);
Seek(f,filesize(f));
end else Rewrite(f,1);
NADO := true;
hSession:= InternetOpen('andowload',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
hUrl:= InternetOpenUrl(hSession,pchar(Table1.FieldByName('Url').AsString),nil,0,0,0);
InternetQueryDataAvailable(hUrl,Sumsize,0,0);
Table1.Edit;
Table1.FieldByName('Size full').AsInteger:= Sumsize ;
if Resumepos > 0 then
begin
InternetSetFilePointer(hUrl,Resumepos,nil,0,0);
end;
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);
ShowMessage('успешно загружено');
novill (2006-06-13 15:55:00) [5]
> anton773
как докачку организовывали?
Сергей М. (2006-06-13 08:40:00) [6]
> Почему?
Хотя бы потому что используется IP-протокол