- •Разработка прикладных программ сетевого обмена данными в среде delphi
- •Лабораторная работа № 1 разработка прикладной программы обмена данными в сети internet
- •2. Программа получения файлов по http и ftp протоколам
- •Лабораторная работа № 2 разработка прикладной программы обмена сообщениями в локальной сети
2. Программа получения файлов по http и ftp протоколам
Разместите на форме три компонента Метка (Label1, Label2, Label3).
Измените свойство первой метки Caption на "Адрес файла: ". Для второй метки свойство Caption измените на "Сохранить файл в: ". Для третьей метке очистите значение Caption, здесь будут выдаваться сообщения по ходу загрузки.
Добавьте два компонента Edit1 и Edit 2. Первый разместите напротив первой метки справа (это будет для ввода адреса), второй - напротив второй метки справа. У обоих сотрите текст в свойствах Text.
Разместите на форме две кнопки (Button1, Button2), для первой в свойстве Caption введите слово "Загрузить файл", для второй - "Закрыть".
Откройте закладку Internet (для Delphi 4) или FastNet (для Delphi 5) палитры компонентов. Поместите на форму компоненты NMFTP и NMHTTP.
Для кнопки Button2 в окне инспектора объектов для события OnClick напишите следующую процедуру:
procedure TForm1.Button2Click(Sender: TObject);
begin
NMFTP1.Disconnect; // разрыв связи по FTP, если она установлена
NMHTTP1.Disconnect; // разрыв связи по HTTP, если она установлена
Close; // Закрываем программу
end;
Для события OnChange компонента Edit1 для проверки заполнения всех полей напишите следующую процедуру:
procedure TForm1.Edit1Change(Sender: TObject) ;
begin
Edit1.Tag := 1 ; // присвоить тагу Edit1 значение 1
end;
Аналогичную операцию необходимо проделать и для Edit2.
Для кнопки Button2 создайте обработчик события OnClick:
procedure TForm1.Button1Click(Sender: TObject) ;
begin
Label3.Caption := '' ; // очиcтка метки для сообщений
if ( Edit1.Tag = 1 ) and ( Edit2.Tag = 1 ) and ( Edit1.Text <> '' )
and ( Edit2.Text <> '' ) then // проверка данных
begin
// данные введены, выполнять действия
end
else Label3.Caption := 'Введите все данные!' // введены не все данные
end;
9. Для проверки типа протокола необходимо из оригинального адреса определить начальные буквы адреса (FTP или HTTP):
procedure TForm1.Button1Click(Sender: TObject);
var
serv , addr , host , dir : String;
begin
Label3.Caption := '' ; // очищаем метку для сообщений
if (Edit1.Tag =1) and (Edit2.Tag =1) and (Edit1.Text <> '' )
and ( Edit2.Text <> '' ) then // проверка данных
begin // данные введены, выполнять действия
addr := Edit1.Text ; // сохраняем адрес в переменную
serv := Copy( addr , 1 , 6 );//копируем 6 символов из
// адреса в переменную serv
if serv = 'ftp://' then // впереди ftp://
begin
// загрузка по FTP
end
else
if serv = 'http:/' then // впереди http:/
begin
// загрузка по HTTP
end
else Label3.Caption := 'Неправильный адрес' ;
end else Label3.Caption:='Не все данные'//не все данные
end;
10. При получении данных по выбранному протоколу необходимо сначала соединиться с хостом (сервером), а уже потом записывать файл. Для этого нужно разбить адрес на хост и собственно адрес файла:
procedure TForm1.Button1Click(Sender: TObject) ;
begin
Label3.Caption := '' ; // очищаем метку для сообщений
if (Edit1.Tag = 1) and (Edit2.Tag =1) and ( Edit1.Text <> '' )
and ( Edit2.Text <> '' ) then // проверка данных
begin // данные введены, выполнять действия
addr := Edit1.Text ; // сохраняем адрес в переменную
serv := Copy( addr , 1 , 6 ) ; // копируем 6 символов из
// адреса в переменную serv
if serv = 'ftp://' then // впереди ftp://
begin
Delete( addr , 1 , 6 ) ; // удаляем первые 6 символов из
//адреса
host := Copy ( addr , 1 , ( Pos( '/' , addr ) - 1 ) ) ;
// находим хост
Delete( addr , 1 , ( Pos( '/' , addr ) - 1 ) ) ;
dir := addr ;
// находим путь к файлу
// загрузка по FTP
end
else
if serv = 'http:/' then // впереди http:/
begin
// загрузка по HTTP
…
11. Дополните процедуру для записи файла по FTP протоколу вместо строки
«// загрузка по FTP»:
Edit1.Enabled := false ; // выключение кнопки Edit1
Edit2.Enabled := false ; // выключение кнопки Edit2
Button1.Enabled := false ; // выключение кнопки Button1
NMFTP1.Host := host ;
NMFTP1.UserID := 'anonymous' ;
NMFTP1.Password := '' ;
Label3.Caption := 'Подключаемся ... ' ;
NMFTP1.Connect ;
NMFTP1.Mode( MODE_IMAGE ) ;
Label3.Caption := 'Запись файла ...' ;
NMFTP1.Download( dir , Edit2.Text ) ;
Label3.Caption := 'Запись произведена успешно' ;
Label3.Caption := 'Отключение' ;
NMFTP1.Disconnect;
Button1.Enabled := true ; // включение кнопки Button1
Edit1.Enabled := true ;
Edit2.Enabled := true ; // включение Edit1, Edit2
Edit1.Clear ;
Edit2.Clear ;
12. Добавьте несколько комментариев:
Выделите компонент NMFTF1 у себя на форме, затем для события OnConnect введите:
procedure TForm1.NMFTP1Connect(Sender: TObject);
begin
Label3.Caption := 'Подключено успешно!!!' ;
end;
Данная процедура в случае успешного соединения выдаст в метку сообщение.
Для события OnConnectionFailed:
Procedure TForm1.NMFTP1ConnectionFailed(Sender: TObject);
begin
Label3.Caption := 'Ошибка!!! Не могу соединиться!' ;
end;
13. Для записи файлов по HTTP протоколу вместо строки «// загрузка по HTTP» введите следующий код:
Edit1.Enabled := false;
Edit2.Enabled := false ;
Button1.Enabled := false ;
Label3.Caption := 'Подключаемся ... ' ;
Delete(addr, 1, 7);
NMHTTP1.InputFileMode := true ;
NMHTTP1.Body := Edit2.Text ;
NMHTTP1.Get( addr ) ; // загрузка
Button1.Enabled := true ;
Edit1.Enabled := true ;
Edit2.Enabled := true ;
Edit1.Clear ;
Edit2.Clear ;
14. Процесс получения данных необходимо оснастить индикатором загрузки. Для этого разместите на форме компонент ProgressBar. Выделите компонент NMFTP1 и откройте в Object Inspector закладку Events. Для события OnPacketRcvd создайте обработчик:
procedure TForm1.NMFTP1PacketRecvd(Sender: TObject);
begin
ProgressBar1.Position := Round(NMFTP1.BytesRecvd* 100/NMFTP1.BytesTotal) ;
Label3.Caption:='Получено'+IntToStr(NMFTP1.BytesRecvd) + ' байт из ' + IntToStr (NMFTP1.BytesTotal ) ;
end;
Все эти действия необходимо повторить и для NMHTTP1, только NMFTP1 в коде замените на NMHTTP1.
15. После завершения загрузки очистите ProgressBar - для этого в конце FTP и HTTP фрагментов допишите следующую строку:
ProgressBar1.Position := 0 ; // очищаем прогресс-бар
Задание на лабораторную работу
Разработать программу, позволяющую организовать прием данных с удаленного узла по протоколам HTTP и FTP, а также передачу данных на удаленный узел по FTP протоколу. Адрес узла, имя и пароль пользователя, имя файла, параметры доступа к сети (IP-адрес и порт сервера) должны настраиваться при использовании программы.
Требования к оформлению отчета
Отчет должен содержать следующую информацию:
Описание алгоритма взаимодействия прикладной программы с внешним узлом на основе заданного протокола.
Перечень используемых классов, их свойств и функций ОС или среды разработки для организации протокола взаимодействия.
Контрольные вопросы
Какие действия позволяет выполнить сетевая утилита FTP?
Расскажите об основных командах утилиты FTP.
Как осуществляется соединение и взаимодействие процессов по протоколу FTP?
Какие возможности протокола FTP используются программами - "браузерами"?
Что такое FTP-сервер? Для чего используется анонимное соединение с сервером?
Какие существуют средства для реализации протоколов Internet в прикладных программах?
Как реализовано программирование прикладных протоколов Internet в среде Borland Delphi?
Расскажите об общих принципах создания программ для работы с прикладными протоколами.