Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > FTP


Автор: Martisha 29.10.2008, 16:09
Всем привет) нужна помощь..
смотрела подобные темы но не поняла..как можно проверить, работает ли FTP-сервер? пробовала подключатся по примеру http://forum.vingrad.ru/topic-231454.html , но какие то ошибки вылазят  smile 
  

Автор: ziga 29.10.2008, 16:38
Что за ошибки то?

Автор: Alix 29.10.2008, 17:13
Как вариант: 

Код

uses WinInet;

var
  internet   : HINTERNET;
  connection : HINTERNET;

function openConnection(const serverURL, username, password : string) : boolean;
begin
  internet := InternetOpen(
    'DeliverabilityTool',
    INTERNET_OPEN_TYPE_PRECONFIG,
    nil,
    nil,
  0);

  if internet = nil then begin
    result := false;
    exit;
  end;

  connection := InternetConnect(
    internet,
    PChar(serverURL),
    INTERNET_DEFAULT_FTP_PORT,
    PChar(username),
    PChar(password),
    INTERNET_SERVICE_FTP,
    0,  // flags. may use INTERNET_FLAG_PASSIVE
    0   // for callbacks
  );

  if connection = nil then begin
    InternetCloseHandle(internet);
    result := false;
    exit;
  end;

  result := true;
end;

function closeConnection : boolean;
begin
  InternetCloseHandle(connection);
  InternetCloseHandle(internet);
  result := true;
end;
 (Выдрано из одного проекта, поэтому все так немного странно).
Чтобы проверить надо соединиться (openConnection), и если true, т.е. все удалось, то и закрытие (closeConnection).

Автор: Martisha 30.10.2008, 09:14
делаю так:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdFTP1: TIdFTP;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdFTP1.Host := 'хх.ххх.х.х';
  IdFTP1.Port := 69;
  idftp1.Username := 'anonymous';
  idftp1.Password := '[email protected]';
  IdFTP1.Connect;
end;

end.



а результат:
программа запускается, но при кликевылетает и выдает ошибку-''Project Project1.exe raised exception class EldSocketError with message 'Socket Error#11001 Host not found'. Process stopped. Use Step or Run to continue.''
 smile

Добавлено @ 09:16
Alix, чего то не пойму пока что с этим делать..но все равно спасибо)

Автор: Matematik 30.10.2008, 09:57
Код

  IdFTP1.Host := 'хх.ххх.х.х';
  IdFTP1.Port := 69;

Интересный адрес у сервера. XXX по порту 69  smile:
Неудивительно что такого адреса не существует, о чем и говоритсья в ошибке "Socket Error#11001 Host not found"

Может попробуешь ввести что-нибудь правдоподобное
Код

  IdFTP1.Host := 'mirror.yandex.ru';
  IdFTP1.Port := 25;




Автор: Martisha 30.10.2008, 10:10
Matematik, ввела, только ошибка та же и еще "Socket Error 11004"  smile 

Автор: aktuba 30.10.2008, 10:12
Цитата(Matematik @  30.10.2008,  10:57 Найти цитируемый пост)
IdFTP1.Port := 25;

25 - это SMTP вроде ;). Поменяй на 21.

Автор: Matematik 30.10.2008, 10:54
Цитата(aktuba @ 30.10.2008,  10:12)
Цитата(Matematik @  30.10.2008,  10:57 Найти цитируемый пост)
IdFTP1.Port := 25;

25 - это SMTP вроде ;). Поменяй на 21.

Ооо точно   smile 

Автор: Martisha 30.10.2008, 11:00
smile поменяла..та же ошибка(((

Добавлено через 4 минуты и 33 секунды
и еще сообщение Internal Error PRO-2794, никак не убирается с экрана!!! (((

Автор: Alix 30.10.2008, 12:02
Цитата(Martisha @  30.10.2008,  09:14 Найти цитируемый пост)
Alix, чего то не пойму пока что с этим делать..но все равно спасибо)

В коде что я привел есть две функции, определены две глобальные переменные и надо подключить модуль WinInet. Вначале вызывается функция openConnection, которая пытается установить соединение с сервером. Если удалось, то вернет true, если нет - false. Если вернула true, то надо не забыть вызвать closeConnection. Короче, чтобы не париться, вот всесь код в одной функии, которая ответит на твой вопрос "работает ли ftp-сервер".
Код
uses WinInet;

function isFTPAlive(const serverURL, username, password : string) : boolean;
var
  internet   : HINTERNET;
  connection : HINTERNET;

begin
  internet := InternetOpen(
    'VitalityTester', // имя "агента". Можешь заменить на что угодно, что тебе нравится.
    INTERNET_OPEN_TYPE_PRECONFIG,
    nil,
    nil,
    0
  );

  if internet = nil then begin
    result := false;
    exit;
  end;

  connection := InternetConnect(
    internet,
    PChar(serverURL),
    INTERNET_DEFAULT_FTP_PORT,
    PChar(username),
    PChar(password),
    INTERNET_SERVICE_FTP,
    0,  // flags. may use INTERNET_FLAG_PASSIVE
    0   // for callbacks
  );

  if connection = nil then begin
    InternetCloseHandle(internet);
    result := false;
    exit;
  end;

  result := true;

  InternetCloseHandle(connection);
  InternetCloseHandle(internet);
end;

В функцию надо передать адрес сервера, имя пользователя и пароль. Пример вызова (в Edit1 надо написать адрес сервера, например приведенный выше mirror.yandex.ru):
Код
  showmessage(edit1.text + ' is alive: ' + boolToStr(isFTPAlive(edit1.text, '', ''), true));

Автор: aktuba 30.10.2008, 13:15
Цитата(Martisha @  30.10.2008,  12:00 Найти цитируемый пост)
smile поменяла..та же ошибка(((

Выкладывай проект.

Автор: Martisha 30.10.2008, 16:31
это чтоли? 
Код

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end

Автор: morpheyushka 30.10.2008, 16:34
Цитата(Martisha @  30.10.2008,  16:31 Найти цитируемый пост)
это чтоли? 

Код

program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end


 smile, давай Unit1 показывай

Автор: Akella 30.10.2008, 19:40
Martisha, на сайте Indy есть готовые примеры.
http://www.indyproject.org/Sockets/Docs/index.EN.aspx


Вот примеры для Инди9
http://www.delphiexpert.ru/load/Components/indy9demos.exe

Документация по инди
http://forum.vingrad.ru/forum/topic-85659.html


Автор: CompWorm 31.10.2008, 00:22
мой обновлятор доктора веба работает примерно так:

Код

memo2.Lines.Add('connecting to ftp.drweb.com ...');
  IdFTP1.Host := 'ftp.drweb.com'; // адрес или IP сервера
  //IdFTP1.Port :=21;
  IdFTP1.Username := 'anonymous';  // Login
  IdFTP1.Password := ''; // Password
  IdFTP1.Passive:=true;
  IdFTP1.Connect();
memo2.Lines.Add('Done!');


ЗЫ исходник по http://www.filehoster.ru/files/bq7358

Автор: Martisha 31.10.2008, 08:31
Цитата(morpheyushka @  30.10.2008,  16:34 Найти цитируемый пост)
 , давай Unit1 показывай 

показывала уже..я там только Port и Host поменяла, а все остальное так же осталось  smile 


Akella, CompWorm, спасибочки..посмотрю-попробую) потом напишу что получится) 

Автор: Martisha 31.10.2008, 11:03
Цитата(CompWorm @  31.10.2008,  00:22 Найти цитируемый пост)
ЗЫ исходник по просьбам

что то у меня ошибки при распаковке :-Р

Автор: CompWorm 1.11.2008, 10:06
перепроверил на работе - качается, распаковывается и запускается... какая у вас ошибка и где?

Автор: Martisha 1.11.2008, 11:13
Цитата(CompWorm @  1.11.2008,  10:06 Найти цитируемый пост)
какая у вас ошибка и где? 

скачала еще раз, попыталась распаковать, выходит ошибка: 

'PowerArchiver не может открыть этот файл. Он может быть неверным архивом.
Внимание: 
Проверьте, что файл не используется.
Если вы попытаетесь открыть EXE файл, то он может быть поврежден или иметь неверный формат.
Если вы хотите повторно открыть многотомный ZIP архив, то откройте его последний том.'

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

Автор: Alix 1.11.2008, 12:46
Архив целый, WinRAR его нормально читает. Попробуйте другой архиватор. Тот же WinRAR или 7zip.

Автор: Martisha 1.11.2008, 13:23
Цитата(Alix @  1.11.2008,  12:46 Найти цитируемый пост)
Попробуйте другой архиватор. 

попробую)

Автор: Martisha 7.11.2008, 12:42
Alix, не получилось, на разных компах пробовала и разными архиваторами..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)