Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

Работа с FTP-сервером через HTTP-proxy   Найти похожие ветки 

 
pathfinder   (2007-10-11 11:02) [0]

Здравствуйте!
Пишу компонент для работы (получение и отправка файлов) c FTP-сервером через HTTP-proxy.
Взял за основу класс TTCPBlockSocket из компонентов Synapse и по примеру класса THTTPSend (Synapse) набросал свой.
Возникла такая проблема: при получении(метод GET) и отправке(метод PUT) часто происходит обрезка файла или файл вообще получается нулевой длины, особенно это актуально для файлов с размером в несколько килобайт и больше. Подскажите пожалуйста как с этим бороться.


 
umbra ©   (2007-10-11 11:44) [1]


> при получении(метод GET) и отправке(метод PUT) часто происходит
> обрезка файла или файл вообще получается нулевой длины,
> особенно это актуально для файлов с размером в несколько
> килобайт и больше. Подскажите пожалуйста как с этим бороться

неплохо бы увидеть код. Кроме того, неплохо бы анализировать ответы прокси на запросы. Надо также помнить, что соединение может оборваться в любой момент и предусмотреть докачку (если она возможна). Ну и самое главное - вы работаете с прокси, который сам знает об фтп (сквид, например) или просто создаете туннель к фтп серверу?


 
pathfinder   (2007-10-11 16:08) [2]

После успешной авторизации я отправляю заголовок запроса, жду заголовок ответа и в случае если нет ответа(таймаут) или код ответа не является кодом ошибки, то отправляю тело запроса. В результате на FTP-сервере оказывается только часть файла или файл с нулевой длиной:(

2007.10.11 15:54:57:214 --> PUT ftp://user:pass@10.1.1.1/test3.zip HTTP/1.0
2007.10.11 15:54:57:214 --> User-Agent: Mozilla/4.0 (compatible)
2007.10.11 15:54:57:214 --> Authorization: Basic ...C5CaG...
2007.10.11 15:54:57:214 --> Proxy-Authorization: NTLM ...XBndX...
2007.10.11 15:54:57:214 --> Host: 10.1.1.1
2007.10.11 15:54:57:214 --> Pragma: no-cache
2007.10.11 15:54:57:214 --> Accept: */*
2007.10.11 15:54:57:214 --> Proxy-Connection: Keep-Alive
2007.10.11 15:54:57:214 --> Content-Length: 130462
2007.10.11 15:54:57:214 -->
2007.10.11 15:55:27:215 HR_Error: 10060,Connection timed out
2007.10.11 15:55:27:215 HR_WriteCount: 65536
2007.10.11 15:55:27:230 HR_WriteCount: 64926
2007.10.11 15:55:27:246 HR_SocketClose:

Код метода класса, реализующего сокет, для отправки данных:

function TBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer;
{$IFNDEF CIL}
var
 x, y: integer;
 l, r: integer;
 p: Pointer;
{$ENDIF}
begin
 Result := 0;
 if TestStopFlag then
   Exit;
 DoMonitor(True, Buffer, Length);
{$IFDEF CIL}
 Result := synsock.Send(FSocket, Buffer, Length, 0);
{$ELSE}
 l := Length;
 x := 0;
 while x < l do
 begin
   y := l - x;
   if y > FSendMaxChunk then
     y := FSendMaxChunk;
   if y > 0 then
   begin
     LimitBandwidth(y, FMaxSendBandwidth, FNextsend);
     p := IncPoint(Buffer, x);
//      r := synsock.Send(FSocket, p^, y, MSG_NOSIGNAL);
     r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL);
     SockCheck(r);
     if Flasterror <> 0 then
       Break;
     Inc(x, r);
     Inc(Result, r);
     Inc(FSendCounter, r);
     DoStatus(HR_WriteCount, IntToStr(r));
   end
   else
     break;
 end;
{$ENDIF}
 ExceptCheck;
end;


 
pathfinder   (2007-10-12 09:36) [3]

Перепробовал массу вариантов, но никакой закономерности не нашел..
В чем может быть дело?


 
umbra ©   (2007-10-12 12:54) [4]


> жду заголовок ответа и в случае если нет ответа(таймаут)

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



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

Форум: "Сети";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 2.397 c
11-1192764911
Vinum
2007-10-19 07:35
2008.08.17
StGrdD6 не работает редактирование ячейки


15-1214795612
Slider007
2008-06-30 07:13
2008.08.17
С днем рождения ! 30 июня 2008 понедельник


4-1194264584
msn777
2007-11-05 15:09
2008.08.17
Cогласовать вызов из разных потоков WriteFile ReadFile FilePointe


2-1215954643
maxNmin
2008-07-13 17:10
2008.08.17
удаление в корзину


2-1215684594
Query
2008-07-10 14:09
2008.08.17
Query





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский