Главная страница
    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
Время: 0.043 c
15-1214737296
ProgRAMmer Dimonych
2008-06-29 15:01
2008.08.17
Как лучше сделать


2-1215755547
Андрей Пл
2008-07-11 09:52
2008.08.17
TDBNavigator в вертикальном виде?


2-1215790986
DillerXX
2008-07-11 19:43
2008.08.17
Помогите с SQL запросом если не лень


15-1214933900
Sergey Masloff
2008-07-01 21:38
2008.08.17
CodeGear RAD Studio 2007 ставил наверное кто-то?


2-1215764597
Kolan
2008-07-11 12:23
2008.08.17
А Resize не вызывается в дизайн тайме?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский