Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_po_lab_1-2_Seti_i_TK.doc
Скачиваний:
18
Добавлен:
16.09.2019
Размер:
228.35 Кб
Скачать

2. Программа получения файлов по http и ftp протоколам

  1. Разместите на форме три компонента Метка (Label1, Label2, Label3).

  2. Измените свойство первой метки Caption на "Адрес файла: ". Для второй метки свойство Caption измените на "Сохранить файл в: ". Для третьей метке очистите значение Caption, здесь будут выдаваться сообщения по ходу загрузки.

  3. Добавьте два компонента Edit1 и Edit 2. Первый разместите напротив первой метки справа (это будет для ввода адреса), второй - напротив второй метки справа. У обоих сотрите текст в свойствах Text.

  4. Разместите на форме две кнопки (Button1, Button2), для первой в свойстве Caption введите слово "Загрузить файл", для второй - "Закрыть".

  5. Откройте закладку Internet (для Delphi 4) или FastNet (для Delphi 5) палитры компонентов. Поместите на форму компоненты NMFTP и NMHTTP.

  6. Для кнопки Button2 в окне инспектора объектов для события OnClick напишите следующую процедуру:

procedure TForm1.Button2Click(Sender: TObject);

begin

NMFTP1.Disconnect; // разрыв связи по FTP, если она установлена

NMHTTP1.Disconnect; // разрыв связи по HTTP, если она установлена

Close; // Закрываем программу

end;

  1. Для события OnChange компонента Edit1 для проверки заполнения всех полей напишите следующую процедуру:

procedure TForm1.Edit1Change(Sender: TObject) ;

begin

Edit1.Tag := 1 ; // присвоить тагу Edit1 значение 1

end;

Аналогичную операцию необходимо проделать и для Edit2.

  1. Для кнопки 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-адрес и порт сервера) должны настраиваться при использовании программы.

Требования к оформлению отчета

Отчет должен содержать следующую информацию:

    • Описание алгоритма взаимодействия прикладной программы с внешним узлом на основе заданного протокола.

    • Перечень используемых классов, их свойств и функций ОС или среды разработки для организации протокола взаимодействия.

Контрольные вопросы

  1. Какие действия позволяет выполнить сетевая утилита FTP?

  2. Расскажите об основных командах утилиты FTP.

  3. Как осуществляется соединение и взаимодействие процессов по протоколу FTP?

  4. Какие возможности протокола FTP используются программами - "браузерами"?

  5. Что такое FTP-сервер? Для чего используется анонимное соединение с сервером?

  6. Какие существуют средства для реализации протоколов Internet в прикладных программах?

  7. Как реализовано программирование прикладных протоколов Internet в среде Borland Delphi?

  8. Расскажите об общих принципах создания программ для работы с прикладными протоколами.

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