Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.10;
Скачать: CL | DM;

Вниз

Скачивание файла   Найти похожие ветки 

 
Netter   (2008-11-14 19:48) [0]

Всем доброго времени суток.
Задача следующая: скачать файл с сервера, который передается им просто-напросто открытым текстом. Упрощенно говоря, сервер дает его так:

#perl here
#$client - дескриптор клиента, IO::Socket
open (IN, "<transfer.dat") or die;
foreach (<IN>) { print $client $_; }
close IN;
close $client;


Но это лирика, сервер гарантированно работает, проверялось клиентом на перле.

Клиент должен этот файл корректно принять и записать на диск. Но есть одно но: нельзя использовать никаких компонентов, ни инди, ни прочих качалок, исключительно WinSock.

Сам я, в течении уже третьего вечера пытаюсь реализовать сие дело таким образом:

//delphi here
Procedure net;
var
 Outy      : File of char;
 BigRecy  : array[0..4196] of char;
 iRet       : integer;
begin
// здесь идет реализация сокетов и прочая романтика,
// к делу относящаяся лишь посредственно
     AssignFile (Outy, GetCurrentDir() + "\" + "test.bin");
     ReWrite(Outy);

     while (iRet<>0) do
     begin
       iRet := Recv(sServerListen, BigRecy, length(BigRecy), 0);
       if (iRet = 0) then
         break;
         BlockWrite(outy, BigRecy, 4196);
       end;

     close (Outy);

end;


Таким образам передавались разные типы файлов, от `man iptables`, то есть простого текста, до картинок и музыки. Результаты следующие: Начало и середина текста выглядели, вроде бы, адекватно, но конец иногда дублировался, иногда образался, всегда по-разному. Вместо невинной картинки приходила какая-то невнятная цветная мазня. С мп3 дело обстоит немного лучше, трек либо укорачивался, либо удлиннялся, с пробелами(которые плеер просто пропускал) примерно по 0.2 сек.

Так как таким образом планируется передавать в основном исполняемые файлы, подобные баги-глюки-лаги абсолютно неприемлемы.

Буду благодарен за комментарии по теме, особенно за рабочий код.


 
Сергей М. ©   (2008-11-14 20:07) [1]

Вот тебе комментарии по самое нехочу:


> iRet := Recv(sServerListen,


Что еще за "Listen" ?

Инф.обмен с успешно подключившимся клиентом должен осуществляться через гнездо, ассоциированное с этим конкретным соединением, а не через слушающее гнездо.


> BlockWrite(outy, BigRecy, 4196);


С какой луны свалилась эта цифирь, если фактически от клиента было принято iRet байт ?


 
Сергей М. ©   (2008-11-14 20:47) [2]


> нельзя использовать никаких компонентов, ни инди, ни прочих
> качалок, исключительно WinSock


В Коране прямо так и написано ?
Или блажь-отсебячина ?


 
Netter   (2008-11-14 21:06) [3]

Т.к. я сатанист, то корректнее упомянуть библию Лавея, если уж про религию :)
Нет, компоненты
а) качают по протоколам фтп или хттп, у меня же - самописный
б) весят неприемлемо много. А 10 кб - это много. И так удается ужать до 25 кб, когда в программе не реализована и половина функций.

А цифирь, да, свалилась практически с луны. Лисен? Честно сказать, конкретно это имя давал не я. Но раз есть - пусть будет. Да и префиксы в виде типа переменной тоже мне непривычны.. В перле несколько проще - скаляр, массив, хеш :)


 
Netter   (2008-11-14 21:09) [4]

Да, вопрос решен :)
По поводу цифиря, спасибо :)


 
Сергей М. ©   (2008-11-14 21:28) [5]


> а)


В TIdTCPClient, TClientSocket, TTCPClient прикладным протоколом даже не пахнет.


> б)


Аргументы кулхацкера.


 
Netter   (2008-11-15 01:57) [6]

а) а) ну никак не подходит под б), поэтому
б) А вы предлагаете писать лоадеры на форточных компонентах, со всякими индейцами? Получая в итоге файл под полметра, который грузится будет дольше, чем программы им загружаемые?


 
Anatoly Podgoretsky ©   (2008-11-15 09:31) [7]


> Да, вопрос решен :)

Решен говоришь, тогда как понимать это

    while (iRet<>0) do

Когда значение ни где не устанавливается, как повезет.


 
Сергей М. ©   (2008-11-17 08:36) [8]


> файл под полметра


Смешной размер по нынешним временам.


> который грузится будет дольше


Ты куда-то спешишь ?)



Страницы: 1 вся ветка

Текущий архив: 2010.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
15-1278319716
oxffff
2010-07-05 12:48
2010.10.10
Кто-нибудь использовал Unmanaged API Reference .NET?


2-1279203188
Nurjanov
2010-07-15 18:13
2010.10.10
Отчет в Excel по шаблону с неизвестным количеством строк


15-1279091543
Cannon
2010-07-14 11:12
2010.10.10
Помогите составить запрос в Interbase


2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


15-1278867791
Дмитрий Белькевич
2010-07-11 21:03
2010.10.10
Восьмая. В Сеть попала презентация ОС Windows 8