Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Вниз

Одинаково ли работают разные FTP-сервера? 


perov   (2002-01-25 10:44) [0]

Дома написал ftp-клиента (ftp-сервер IIS). Программа работает на ура. Принес на работу (ftp broker)- и облом, программа работает, но файлы на сервер не закачивает. Анализирую протоколы сервера, выяснил, что вместо закачки файла клиент делает докачку, что возможно, если на сервере есть файл с таким именем. НО файла то нет!

В связи с этим стает вопрос: одинаково или нет фтп-сервера обрабатывают запрос фтп-клиента на получение списка файлов по определенному шаблону?



Wonder   (2002-01-25 11:00) [1]

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



nikkie   (2002-01-25 11:39) [2]

реализация протокола фтп-серверами действительно может различаться - кроме отсутствии поддержки некоторых комманд, о чем сказал Wonder, сервера могут возвращать разные коды в ответ на некоторые комманды.

но чтобы фтп-сервер говорил о наличии файла, когда его там нет - невозможно. скорее всего ошибка в твоем клиенте. создай на клиенте лог сессии и посмотри, что реально происходит.



perov   (2002-01-25 12:01) [3]

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

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

Вот и абстрагируйся после этого :)



Wonder   (2002-01-25 12:22) [4]

Кстати, что это за "получение списка файлов по определенному шаблону"?
Насколько я помню, в RFC ничего подобного нет...



perov   (2002-01-25 12:47) [5]

использую малость доработанную версию INDY компонента (реализовал докачку) TidFTP. У него есть метод List, который в TStringList возвращает список файлов по указанному шаблону.



Wonder   (2002-01-25 13:16) [6]

Так в таком случае, все вопросы к компоненту. По протоколу FTP можно получить только список всех файлов в директории. Потом сам компонент из полученного списка выбирает файлы по шаблону.



nikkie   (2002-01-25 13:44) [7]

>Wonder
ты инди не обижай :)
List метод просто LIST или NLST команду дает. а у этих комманд есть параметр. perov интерпретирует этот параметр как "шаблон". а уж как фтп-сервер к нему отнесется - вопрос.

RFC959:
NAME LIST (NLST)
This command causes a directory listing to be sent from
server to user site. The pathname should specify a
directory or other system-specific file group descriptor.

интерпретация file group descriptor как "шаблона" мне кажется логичной, но реализовано ли это во всех серверах... имхо, надежней просто список всех файлов запрашивать и в нем искать.

есть конечно еще вариант - давать команду GET, но обрывать data connection. только сложновато реализовать.



Wonder   (2002-01-25 13:52) [8]

>nikkie
С Indy не знаком :)
file group descriptor - в привычном понимании это и есть директория.
Если бы имелся ввиду шаблон файла, то это уже был бы просто file descriptor или wildcard.



perov   (2002-01-25 15:57) [9]

procedure List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean);

Parameters

ADest: TStrings

List for files and directories in the current directory.

const ASpecifier: string = ""

File mask for the listing. Default value is "".

const ADetails: boolean = true

Include file details. Default value is True.

Description

List is a procedure used to request a list of files or directories in the current directory on the FTP server.

ADest is the TStringList used to store the information requested.

ASpecifier is a String that contains a mask indicating the files and/or directories to be included in the listing. ASpecifier can contain common wildcard characters like "*" and "?". Some useful masks include:

*.* - All files in the current directory.
* - All directory entries in the current directory.
*. - All files regardless of extension in the current directory.
A??.txt - All text files that have a 3-character name starting with "A".


Если я правильно понял, то в ASpecifier, могу задать имя файла, существование которого я хочу проверить на сервере.

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





Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.023 c
1-32795           Yaro                  2002-03-31 16:04  2002.04.11  
Ради бога! Прочтите это!


1-32772           anod                  2002-03-30 14:13  2002.04.11  
Скрыть форму


14-32979          Стас                  2002-03-04 08:32  2002.04.11  
Исходники для работы с dBASE в Паскале


1-32746           IGI                   2002-03-29 12:57  2002.04.11  
Файлы


3-32639           Юрий Федоров          2002-03-18 16:52  2002.04.11  
Сессия Oracle