Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2009, 13:07   #1
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию Проблема с соединением к ФТП.

При скачивании файла выдает ошибку:
"Accept timed out"
Код:
 IdFTP1.host := 'ftp.narod.ru';
        IdFTP1.username := 'имя';
        IdFTP1.password := 'пароль';
        IdFTP1.Connect;
        IdFTP1.Get('text.html','C:\Users\Макс\Desktop\text.html', True, True);
        IdFTP1.Disconnect;
В чем пробема?
И еще никак не могу найти код для получения неформативного текста с сайта (например через TWebBrowser). Чтоб было без тегов, только тот текст, который видит пользователь(весь со ссылками).
Maxs вне форума Ответить с цитированием
Старый 17.05.2009, 22:44   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Превышено время ожидания от сервера. Примеры с ftp и narod.ru в этом разделе уже описывались, воспользуйтесь поиском.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 18.05.2009, 12:09   #3
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Превышено время ожидания от сервера. Примеры с ftp и narod.ru в этом разделе уже описывались, воспользуйтесь поиском.
Я этот код брал из той темы, но он у меня не работает.
Maxs вне форума Ответить с цитированием
Старый 18.05.2009, 12:18   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

после какой строки появляется ошибка ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 18.05.2009, 12:48   #5
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
после какой строки появляется ошибка ?
Я не знаю. Как посмотреть? Внизу вот на этом ошибка:
Код:
First chance exception at $7569F328. Exception class EIdAcceptTimeout with message 'Accept timed out.'. Process Project2.exe (1232)
First chance exception at $7569F328. Exception class EIdReplyRFCError with message 'Broken pipe
'. Process Project2.exe (1232)
Пробовал еще вот так, тоже самое:
Код:
IdFTP1.Get('text.txt',stream);
stream.SaveToFile('C:\Users\Макс\Desktop\text.txt');
Maxs вне форума Ответить с цитированием
Старый 18.05.2009, 13:01   #6
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Написал вот так:
if Not IdFTP1.Connected then IdFTP1.Connect();
и первая ошибка исчезла, 'Broken pipe осталась.
Maxs вне форума Ответить с цитированием
Старый 18.05.2009, 13:02   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Если не знакомы с трасировкой, контрольными точками и т.д. тогда не за ту задачу взялись
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 18.05.2009, 13:11   #8
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Я еще нашел функцию для скачки:
Код:
function FtpDownloadFile(strHost, strUser, strPwd: string;
  Port: Integer; ftpDir, ftpFile, TargetFile: string; ProgressBar: TProgressBar):
    Boolean;

  function FmtFileSize(Size: Integer): string;
  begin
    if Size >= $F4240 then
      Result := Format('%.2f', [Size / $F4240]) + ' Mb'
    else if Size < 1000 then
      Result := IntToStr(Size) + ' bytes'
    else
      Result := Format('%.2f', [Size / 1000]) + ' Kb';
  end;

const
  READ_BUFFERSIZE = 4096; // or 256, 512, ...
var
  hNet, hFTP, hFile: HINTERNET;
  buffer: array[0..READ_BUFFERSIZE - 1] of Char;
  bufsize, dwBytesRead, fileSize: DWORD;
  sRec: TWin32FindData;
  strStatus: string;
  LocalFile: file;
  bSuccess: Boolean;
begin
  Result := False;

  { Open an internet session }
  hNet := InternetOpen('Program_Name', // Agent
    INTERNET_OPEN_TYPE_PRECONFIG, // AccessType
    nil, // ProxyName
    nil, // ProxyBypass
    0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE

  {
    Agent contains the name of the application or
    entity calling the Internet functions
  }

  { See if connection handle is valid }
  if hNet = nil then
  begin
    ShowMessage('Unable to get access to WinInet.Dll');
    Exit;
  end;

  { Connect to the FTP Server }
  hFTP := InternetConnect(hNet, // Handle from InternetOpen
    PChar(strHost), // FTP server
    port, // (INTERNET_DEFAULT_FTP_PORT),
    PChar(StrUser), // username
    PChar(strPwd), // password
    INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher?
    0, // flag: 0 or INTERNET_FLAG_PASSIVE
    0); // User defined number for callback

  if hFTP = nil then
  begin
    InternetCloseHandle(hNet);
    ShowMessage(Format('Host "%s" is not available', [strHost]));
    Exit;
  end;

  { Change directory }
  bSuccess := FtpSetCurrentDirectory(hFTP, PChar(ftpDir));

  if not bSuccess then
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    ShowMessage(Format('Cannot set directory to %s.', [ftpDir]));
    Exit;
  end;

  { Read size of file }
  if FtpFindFirstFile(hFTP, PChar(ftpFile), sRec, 0, 0) <> nil then
  begin
    fileSize := sRec.nFileSizeLow;
    // fileLastWritetime := sRec.lastWriteTime
  end
  else
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    ShowMessage(Format('Cannot find file ', [ftpFile]));
    Exit;
  end;

  { Open the file }
  hFile := FtpOpenFile(hFTP, // Handle to the ftp session
    PChar(ftpFile), // filename
    GENERIC_READ, // dwAccess
    FTP_TRANSFER_TYPE_BINARY, // dwFlags
    0); // This is the context used for callbacks.

  if hFile = nil then
  begin
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    Exit;
  end;

  { Create a new local file }
  AssignFile(LocalFile, TargetFile);
{$I-}
  Rewrite(LocalFile, 1);
{$I+}

  if IOResult <> 0 then
  begin
    InternetCloseHandle(hFile);
    InternetCloseHandle(hFTP);
    InternetCloseHandle(hNet);
    Exit;
  end;

  dwBytesRead := 0;
  bufsize := READ_BUFFERSIZE;

  while (bufsize > 0) do
  begin
    Application.ProcessMessages;

    if not InternetReadFile(hFile,
      @buffer, // address of a buffer that receives the data
      READ_BUFFERSIZE, // number of bytes to read from the file
      bufsize) then
      Break; // receives the actual number of bytes read

    if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE) then
      BlockWrite(LocalFile, buffer, bufsize);
    dwBytesRead := dwBytesRead + bufsize;

    { Show Progress }
    ProgressBar.Position := Round(dwBytesRead * 100 / fileSize);
    Form2.Label1.Caption := Format('%s of %s / %d %%', [FmtFileSize(dwBytesRead),
      FmtFileSize(fileSize), ProgressBar.Position]);
  end;

  CloseFile(LocalFile);

  InternetCloseHandle(hFile);
  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);
  Result := True;
end;
Вызываю вот так:

FtpDownloadFile('ftp.narod.ru', 'имя', 'пароль',
21, 'ftp://ftp.narod.ru/', 'text.txt', 'C:\Users\Макс\Desktop\text.txt', ProgressBar1);
Проблема в том, что он не находит дирректорию (пишет неверная дирректория). Файл лежит не в папке, в обозревателе прямо тут: ftp://ftp.narod.ru/. Какую дирректорию указать?
Maxs вне форума Ответить с цитированием
Старый 18.05.2009, 21:16   #9
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Решение этой ошибки нигде не нашел. Но нашел в компонентах ConnectionBroker1 и еще всякие Broker. Я в правильном направлении копаю?
Maxs вне форума Ответить с цитированием
Старый 18.05.2009, 22:20   #10
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

http://programmersforum.ru/showpost....60&postcount=4
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать файл а ФТП gusluk Работа с сетью в Delphi 1 14.01.2009 08:49
Проблема с соединением Клиент-Сервер ImmortalAlexSan Работа с сетью в Delphi 1 13.01.2009 14:45
Проблема с фтп входом на сайт...помогите skylight Безопасность, Шифрование 3 01.11.2008 00:49
Проблема с соединением с БД InterBase TemposYS БД в Delphi 1 03.05.2008 12:08