Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

1.2.8. Функция «Получить имя текущего Каталога на ftp-сервере» -FtpGetCurrentDirectory

function FtpGetCuircutDirectory(

hConnect: HINTERNET:

IpszCurrentDireetory: PChar;

var IpdwCurrenlDirectory: DWORD): BOOL; stdcall;,

где hConnect - дескриптор FTP-соединения (возвращаемый функцией InternetConnect);

IpszCurrentDireclory - адрес буфера, куда записывается строка, содержащая имя текущего каталога;

IpdwCurrentDirectory - длина буфера. Возвращаемое значение TRUE при успешном выполнении или FALSE в случае ошибки.

Примечание. Если буфер IpszCurrentDireclory имеет недостаточный размер, то в переменную IpdwCurrentDirectory записывается общая длина текущего каталога.

1.2.9. Функция чтения файла с http-сервера FtpGetFile

function FtpGetFile(

hConnect: HINTERNET;

IpszReinoteFile: PChar;

IpszNewFile: PChar;

fFaillfExists:BOOL:

dwFlagsAndAttributes: DWORD;

dwFlags: DWORD; dwContext: DWORD): BOOL, stdcall;,

где hConnect - дескриптор соединения (возвращаемый функцией InternetConnect);

IpszRemoteFile - адрес строки, заканчивающейся двоичным нулем, которая содержит имя удаленного файла;

IpszNewFile - адрес строки, заканчивающейся двоичным нулем, которая содержит имя локального файла, в который будет переписан файл с FТР-сервера;

fFaillfExists - флаг определяет, как будет выполняться функция, если локальный файл уже существует. Если локальный файл с таким именем уже существует и флаг fFaillfExists установлен в TRUE, то функция FtpGetFile выполняться не будет;

dwFiagsAndAttribtites - определяет атрибуты нового файла. Возможны любые комбинации флагов FILE_ATTRIBUTE_*, используемых функцией CreateFile;

dwFlags - флаги преобразования копируемого файла. Возможны следующие значения флагов;

INTERNET_FLAG_TRANSFER_ASCII - преобразование файла в ASCII,

INTERNET_ FLAG_TRANSFER _BINARY - преобразование файла в двоичный;

dwContext - обычно записывается 0. Возвращаемое значение TRUE при успешном выполнении или FALSE в случае ошибки.

2. Задание по практическому занятию

2.1. Создание клиентского приложения.

Создайте клиентское приложение, имеющее вид, показанный на рис. 1.

Рис. 1

Для чего на форму перенесите компоненты, перечисленные в табл.3.

Таблица 3

Компоненты приложения

Компонент

Класс

Описание

Label1

TLabel

Метка «Введите URL» для Web-сервера

Label2

TLabel

Метка «Введите адрес FТР-сервера»

Label3

TLabel

Метка «Управление Web-сервером»

Label4

TLabel

Метка «Управление FTP-сервером»

Label5

TLabel

Метка «Удаленный файл»

Label6

TLabel

Метка «Локальный файл»

Label7

TLabel

Метка «Наименование каталога»

Memo1

TMemo

Окно дня вывода прочитанного с Web-сервера файла

Memo2

TMemo

Окно для вывода прочитанного с FTP-сервера файла или каталога

Edi1

TEdi 1

Окно ввода URL для Web-сервера

Edi2

TEdi 1

Окно ввода имени FTP-сервера

Edi3

TEdi 1

Окно ввода имени удаленного файла (файла наFTP-сервере)

Edi4

TEdi 1

Окно ввода имени локального файла (файла на локальном компьютере, куда будет записываться файл, прочитанный с FTP-сервера)

Edi5

TEdi 1

Окно ввода имени каталога на FTP-сервере

Button1

TButton

Кнопка «Установить соединение» с Web-сервером

Button2

TButton

Кнопка «Установить соединение» с РТР-сервером

Button3

TButton

Кнопка «Текущий катален » для вывода на экран содержимого текущего каталога FTP-сервера

Button4

TButton

Кнопка «Прочитать файл» с FTP-сервера

Button5

TButton

Кнопка «Вывод каталога» FTP- сервера

Button6

TButton

Кнопка «Очисти и окна»

Button7

TButton

Кнопка «Выход»

Далее необходимо выполнить следующие действия:

1) Подключите библиотеку WinInet (сделайте ссылку на библиотеку в списке подключаемых модулей - uses):

uses

Windows, Messages, SysUtils, Variants, Classes. Graphics, Controls, Forms,

Dialogs, StdCtrls. WinInet;

2) В области глобальных переменных определите следующие дескрип­торы:

Var

Form 1: TForm l;

hsession, hconnect, hfile: hInternet;

3) Для события OnCreale формы Form1 запишите следующий про­граммный код:

Memo1.Clear;

Memo2.Clear;

// Имя файла, находящегося на Web-сервере

Edit 1 .Text := 'http://myself/www/index.html';

// Адрес FTP-сервера

Edit2.Text :='127.0.0.1';

// Имя файла, находящегося на FTP- сервере, который будет копиро­ваться в локальный каталог

Edit 3.Text := 'fttp 1/Index.html';

// Имя локального файла, в который записывается файл,

// копируемый с FTP-сервера

Edit 4.Text:= 'C:\file.txt';

// Каталог' на FTP-сервере, содержимое которого выводится в окно Меmо2 Edit5.Text:= '/ftp1/*.*';

4) Для события OnClick кнопки «Установление соединения с WEB-сeрвером» запишите следующий программный код:

procedure TForm1 .Button1 Click(Sender: TObject);

VAR

url: Siring:

buf: Array[1..100] of char;

dwtotal: dword;

s: String;

k: Integer;

begin

url := Editl.Text;

If Pos(http://', Lowercase(url))=0 then (url):= 'http://'+url;

// Открытие сеанса связи

hSession := InternetOpen(nil,

INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

If Assigned(hSession) then

begin

// Установление соединения по определенному URL

file :=intenetOpenUrlhSession, PChar(url),

nil, 0, INTERNET_FLAG_RELOAD, 0);

If Assigned(hfile) then

begin

// Чтение html-файла

internetReadFile(hfile, @buf, sizeof(buf), dwtotal);

s := String(buf);

memo 1 .Lines.Add(s);

// Закрытие соединения

InternetCloseHandle(hfile):

end:

// Завершение сеанса связи

InternetCloseHandle(hsession);

end;

end:

5) Для события OnClick кнопки «Установление соединения c FTP -сервером» запишите следующий программный код:

procedure TForm1 .Button2CTick(Sender: TObject);

VAR

url: String:

srvname: Array [1..100] of char;

begin

url := Edit2.Text;

StrPCopy(@srvname,url);

// Открытие сеанса связи

hSession := IntemetOpen(nil, INTERNET_OPBN_TYPE_PRECONFIG

nil, nil. 0);

If Assigned(hSession) then

begin

// Установление соединения с РТР-сервером для пользователя anonymous

// и при отсутствии пароля

connect := InternetConnect(hSession, @srvname, 21,

'anonymous', nil, INTERNET_SERVICE_FTP, 0, 0);

IF Assigned (connect) then

ShowMessage('Соединение с FTP-сервером установлено');

end;

end;

6) Для события OnCIick кнопки «Вывод каталога» запишите следующий программный код:

procedure TForm1 .Buttun5Click( Sender: TObject);

VAR

DirInfo: W1N32_FIND_ DATA;

hDir: hInternet;

DirList: Array [1.. 100] of char;

dwflag: DWORD;

result: Boolean;

begin

StrPCopy(@DirLis1. Edit5.Text);

// Найти первый файл по указанному шаблону

hDir := FtpFindFirstFile(hConnect, @DirList, DirInfo, dwFlag, 0);

// Обработка ошибок

if not Assigned(hdir) then

begin

if GetLastError()=ERROR_NO_MORE_FILES then

begin

ShovvMessage('B каталоге отсутствуют файлы');

InternetCloseHandle( hDir);

end

else

begin

ShowMessageFmt('Ошибка %d', [GetLastError ()]);

IntemetCloseHandle(hDir):

end;

end

else

begin

// Записать в поле Memo2 информацию об очередном найденном файле

memo2. Lines. Add(DirInfo.cFileName):

ifDirInfo.dwFileAttribules=FILE_ATTRIBUTE_DIRECTORY

then memo2.Lines.Add(DirInfo.cFileName+'<DlR>')

else memo2.Lines. Add(DirInfo.cFileName);

// В цикле ищутся все остальные файлы

repeat

result:= InternetFindNextFile (hDir, @DirInfo);

if not result then

if GetLastERROR()=ERROR_NO_MORE_FILES

Then InternetCloseHandle(hDir)

else

begin

ShowMessageFmt('Ошибка %d', [GetLastError ()]);

InternetCloseHandle(hDir);

end

else

begin

ifDirInfo.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY

then memo2.Lines.Add(DirInfo.cFiIeName+'<DIR>')

else memo2.Lines.Add(DirInfo.cFileName);

end;

until not result;

end;

end;.

ДОПОЛНИТЕЛЬНО ЗАДАНИЕ

1. Самостоятельно запрограммируйте событие OnClick кнопки «Теку­щий каталог», используя для этих целей функцию FtpGelCurrentDirectory.

2. Самостоятельно запрограммируйте событие OnClick кнопки «Про­читать файл», используя для этих целей функцию FtpGelFile.

3. Выполните чтение большого файла с Web-сервера при ограничен­ном размере буфера buf. В этом случае следует выполнить несколько по­следовательных чтений с Web-сервера. Признаком конца html-файла явля­ется тег </HTML>.

ЛИТЕРАТУРА

1. Грегори К. Использование Visual С++6. Специальное издание /Пер. с англ. М., Издательский дом «Вильяме», 1999. 864 с.

2. Озеров В. A. Delphi. Советы программистов. СПб., Символ-Плюс, 2004.976 е.

3. Джамса К., Коуп К. Программирование для INTERNET в среде Windows /Пер. с англ. СПб., Питер, 1996. 688 е.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Назначение и основные функции протокола FTP.

2. Назначение и основные функции протокола HTTP.

3. Основные команды протокола FTP.

4. Основные команды протокола HTTP.

5. Назначение команды FTP.EXE.

6. Из каких частей состоит и для чего используется URL?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]