ПРИЛОЖЕНИЕ 1


Описание некоторых компонентов клиент-серверной версии Delphi

Данное приложение предусмотрено как справочный раздел, содержащий структурированную по вкладкам Component Palette информацию о некоторых компонентах. Кроме сводных таблиц о методах и свойствах объектов, являющихся экземплярами классов, представленных соответствующими компонентами, здесь находится также их краткое описание общего характера и рекомендации по использованию.

 

Вкладка Fast Net

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

Замечание

Эта вкладка была создана не самой корпорацией Inprise, а сторонним производителем — фирмой NetMasters L.L.C.

 

Получение точного времени — компонент NMDayTime

Значок компонента NMDayTime изображен на рис. П1.1.

Назначение

Данный компонент предназначен для получения точного времени от специальных серверов, предоставляющих такой сервис. Использование возможности синхронизации часов компьютеров как в масштабах локальной сети, так и Интернета позволяет не только упорядочить работу людей, разделенных расстояниями внутри рабочих групп, но и создавать распределенные приложения. 

Рис. П1.1.КомпонентNMDayTime

Поскольку очень часто разные процессы, которые запускаются на разных машинах, представляют собой последовательную обработку одних и тех же данных, то отсутствие синхронизации часов может привести к неверной работе системы в целом. В Интернете присутствуют серверы, которые "раздают" точное время. Они, в свою очередь, синхронизированы с государственными и международными эталонами, что исключает возможность отставания или, наоборот, опережения часов по отношению к стандартам. Многие из таких серверов можно найти в Интернете с помощью поисковых систем. Кроме того, в демонстрационном примере компонента NMTime, прилагающегося к Delphi и описанного ниже, есть большой список серверов, которые в числе прочих служб обеспечивают доступ к точному времени.

Свойства

Свойства данного компонента, как и многих других, представляют собой богатый набор, которым редко приходится пользоваться в полном объеме. Наиболее важные из них рассмотрим в табл. П1.1.

Таблица П1.1.Некоторые свойства объекта NMDayTime

Свойство

Описание

DayTimeStr

Содержит время, полученное с сервера точного времени

Connected

Булевское свойство, определяющее, открыто ли соединение с сервером в данный момент

Host

Содержит IP-адрес, разделенный точками, либо имя сервера в DNS. Обратите внимание на отличие этого свойства от интернет-компонентов, созданных фирмой Inprise, которые в этом поле могут содержать только имя сервера

Port

Указывает номер сетевого порта сервера, на котором инсталлирована служба предоставления времени

TimeOut

Содержит время, в течение которого ожидается ответ сервера. При превышении времени ожидания генерируется исключительная ситуация. В случае, когда установлено нулевое значение, контроль превышения времени отключается

Методы

Методы объектов данного класса целиком унаследованы от класса TPowerSock, предназначенного для работы с сокетами. Описание этого компонента представлено ниже.

Рекомендации по использованию

Для использования данного компонента необходимо как минимум установить параметры сервера — имя или IP-адрес и порт, на котором работает служба предоставления времени. После этого можно затребовать время путем обращения к свойству DayTimestr. Следует отметить, что формат представления данных времени может зависеть от конкретного сервера, и поэтому свойство DayTimestr представлено строковым типом данных. При практическом использовании компонента необходимо сначала проверить, в каком именно формате работает применяемый сервер.

Кроме того, следует заметить, что Интернет не является системой, работающей в режиме реального времени. Это значит, что существует временная задержка между временем отправки запроса и получения ответа. Причем эта разница сильно зависит от загруженности канала связи и самого сервера, обрабатывающего запрос. Для того, чтобы добиваться очень точной установки времени, необходимо синхронизировать время в часы, когда канал вашего провайдера максимально разгружен (обычно это 4—5 часов утра). Кроме того, можно устанавливать некоторую разностную временную величину получения отклика, по истечении которой ответ будет считаться не точным. При получении ответа за время, меньшее этой величины, можно еще увеличить точность, путем нахождения срока обработки запроса. Если считать, что время доставки запроса и ответа одинаково (в большинстве случаев — это так, за исключением варианта спутникового соединения, в котором, как правило, отклик сервера доставляется намного быстрее), то получить практически точное показание часов можно при вычетании половины времени получения ответа и введении поправки на нее.

Пример

Для примера выберем сервер Национального института стандартов и технологий (National Institute of Standards and Technology), который является государственным учреждением США. Прежде чем начинать разработку приложения, необходимо уточнить параметры этого сервера. Описание службы DateTime находится по адресу www.boulder.nist.gov/timefreq/service/its.htm.На этой странице можно прочитать и о формате предоставления времени, и о параметрах сервера.

Приведем здесь описание формата предоставления времени с целью последующего его анализа в примере.

Описание используемого сервера времени

Строка, передаваемая клиенту и содержащая время и дату, имеет вид:

JJJJJ YR-MO-DA HH:MM:SS TT L H msADV UTC(NIST) OTM

где:

 Институт, который обеспечивает доступ к точному времени, поддерживает несколько серверов, список которых доступен по адресу www.boulder.nist.gov /timefreq/service/time-servers.html. Мы воспользуемся сервером time-a.nist.gov, которому соответствует IP-адрес 129.6.15.28. Служба времени установлена здесь на сетевом порту с номером 13.

Таким образом, все, что осталось сделать, — это получить строку, содержащую время, и раскодировать ее.

Постановка задачи и ее реализация

В данном примере реализуем следующие задачи:

Для реализации поставленных задач создадим новый проект, поместим в форму компонент NMDateTime и кнопку Button. Из свойств первого изменим Host на time-a.nist.gov. Остальные параметры могут оставаться установленными по умолчанию. Сделайте на кнопке надпись "Установить время". Два раза щелкнув по ней в режиме проектирования, откройте заготовку для обработчика события Buttoniciick. В него следует вписать код, приведенный в листинге П1.1.

Листинг П1.1. Реализация процесса получения и установки времени 

procedure TForml.ButtonlClick(Sender: TObject);

var

newdatetime, localdatetime: tsystemtime;

currentzoneinfо: TTimeZonelnformation;

tmpstring: string;

timebefore, timeafter, delta: tdatetime;

begin

timebefore:=now;

tmpstring:=NMDayTimel.DayTimeStr;

delta:=(timeafter-timebefore)/2;

if Copy(tmpstring,29,1)='0' then

begin

newdatetime.wYear:=strtoint('20'+copy(tmpstring,8,2));

newdatetime.wMonth:=strtoint(copy(tmpstring,11,2));

newdatetime.wDay:=strtoint(copy(tmpstring,14,2));

newdatetime.wHour:=strtoint(copy(tmpstring,17,2});

newdatetime.wMinute:=strtoint(copy(tmpstring,20,2)) ;

newdatetime.wSecond:=(strtoint(copy(timetostr(delta) ,7,2))+

strtoint(copy(tmpstring,23,2))); GetTimeZonelnformation(currentzoneinfo); SystemTimeToTzSpecificLocalTime(@currentzoneinfo,

newdatetime,localdatetime); SetLocalTime(localdatetime);

end; 

end;

Рассмотрим несколько пояснений к приведенному коду.

Прежде чем получать данные от сервера, нужно выяснить текущее время, чтобы затем найти время выполнения запроса. После обращения к свойству NMDayTimel. DayTimeStr в переменную tmpstring помешается информация, полученная от сервера. Вслед за выполнением запроса, опять находится текущее время, а также вычисляется разность между ним и начальным. Половина этой разности и будет составлять поправку на осуществление запроса.

После того как искомая информация получена, необходимо ее декодировать и поместить в запись newdatetime. Поскольку сервер предоставляет время по международным стандартам, то также нужно сделать поправку на часовой пояс. Это осуществляет функция SystemTimeToTzSpecificLocalTime, вызываемая  через Windows API.

Последним этапом является вызов также API-функции setLocaiTime, выполняющей установку текущего времени.

Если данная программа выполняется на компьютере, с неустойчивым подсоединением к сети Интернет, то в ней следует обработать возникновение исключительных ситуаций.

 

Обмен сообщениями между компонентами сетевых программ

На вкладке FastNetимеется два компонента, специально предназначенных для обмена сообщения и файлами в масштабах локальных и глобальных сетей: NMMsg и NMMsgServ, пиктограммы которых представлены на рис. П1.2.

Рис. П1.2.Компоненты NMMsg и NMMsgServ

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

 

Компонент NMMsg

Назначение

Объекты класса NMMsg предназначены для выполнения следующих основных операций:

Обратите внимание, что в отличие от обмена данными с помощью компонентов Delphi clientsocket и serverSocket, в данной паре компонентов для работы с файлами не нужно создавать потоки, ассоциированные с ними. Достаточно указать имя файла, и путь к нему, если файл размещен в каталоге, отличном от текущего.

Свойства

Следует отметить, что как и в компоненте NMDateTime, практически все свойства объектов класса ыммзд унаследованы от класса TPowerSock. Основные из них приведены в табл. П1.2.

Таблица П1.2.Важнейшие свойства объекта тмзд

Свойство

Описание

Host

Содержит IP-адрес, разделенный точками, либо имя сервера в DNS

Port

Указывает номер сетевого порта сервера. Это число должно совпадать с номером порта, на работу с которым настроен объект NMMSGServ, работающий в составе запущенного к моменту соединения приложения на сервере

FromName

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

TimeOut

Содержит время, в течение которого ожидается ответ сервера. При превышении времени ожидания генерируется исключительная ситуация. В случае, когда установлено нулевое значение, контроль превышения времени отключается

BytesRecvd

Содержит число полученных байтов (символов) информации

BytesSent

Содержит число отправленых байтов (символов) информации

Методы

Компонент NMMsg содержит набор методов, наиболее важные из которых представлены в табл. П1.З.

Таблица П1.3.Ключевые методы объекта NMMsg

Метод Описание

Postlt

Посылает серверу сообщений (компьютеру, на котором активизирован объект NMMsgServ) строку, указанную в параметре вызова метода

CaptureFile

Записывает в файл все данные, принимаемые сокетом, посредством которого происходит обмен

Capturestrearn

Аналогично предыдущему, но запись происходит в поток. Кроме того, можно ограничить число записываемых символов путем указания их числа во втором параметре вызова метода. Если нужно поместить в поток все символы, полученные от сервера, то в качестве параметра помещается (—1). Первый параметр вызова метода — поток, в который помещаются данные

Capturestring

Полностью аналогичен предыдущему методу, но запись идет в строковый параметр

Read

Возвращает строку, состоящую из символов, полученных от сервера. Количество символов указывается в параметре вызова метода

ReadLn

Возвращает строку, состоящую из символов, полученных от сервера. Запись заканчивается, как только встретился символ перевода строки

SendFile

Отсылает содержимое файла, имя которого указано в качестве параметра

SendStream

Отсылает поток, указанный в параметре

События

Для объекта NMMsg возникновение события демонстрирует состояние сокетного соединения, а его обработка используется для выполнения тех или иных операций, требующих соответствующего состояния. Например, читать данные, которые прислал сервер, имеет смысл тогда, и только тогда, когда сервер прислал некие данные. Наиболее важные события этого компонента представлены в табл. П1.4.

Таблица П1.4.События объекта NMMsg

Событие

Описание

OnConnect

Возникает, когда клиентский и серверный сокеты соединились

OnDisconnect

Обратное предыдущему событию

OnHostResolved

Является следствием успешности сопоставления имени сервера и IP-адреса

OnlnvalidHost

Обратное предыдущему событию

OnPacketRecvd

Возникает при получении данных от удаленной машины

OnPacketSent

Возникает после отправки данных на удаленную машину

Рекомендации по использованию

Данный компонент работает в паре с объектом NmsgServ. Серверный компонент, разумеется, может сочетаться с клиентским в одном приложении, все зависит от рода выполняемых задач.

Для того чтобы организовать пересылку данных с одного компьютера на другой, необходимо определить — какой из них будет ожидать подключение от другого (других), а какой (какие) — подключаться к нему. Как только подключение установлено, данные пересылаются одинаково как в случае клиента, так и сервера.

Чтобы создать клиента, необходимо компонент NMMsgServ поместить или в форму (в случае визуального приложения) или в Data Module,выполняющий роль контейнера невизуальных объектов. После этого нужно, как минимум, сделать следующее:

Вызов метода отправки или приема сообщения должен происходить только в случае, когда объект NMMsg готов его обработать. Это значит, что операторы, выполняющие те или иные действия, необходимо помещать в процедуры обработки событий. Таким образом, например, в ответ на появление события onConnect, можно вызвать метод Postit, или после возникновения события OnPacketRecvd прочитать в переменную полученные данные.

 

Компонент NMMsgServ Назначение

Представляет собой серверную часть системы обмена данными, предоставляемой компонентами ыммзд и NMMsgServ.

Компонент NMMsgServ имеет следующие основные функции.

Свойства

Свойства данного объекта, будучи по большей части унаследованы от объекта PowerSock, аналогичны ему и объекту ыммзд, но поскольку речь идет о серверной реализации, то важнейшие из них имеют свою специфику. Прежде всего, нужно настраивать локальные параметры, важнейшим из которых является номер сетевого порта. Свойства компонента NMMsgServ представлены в табл. П1.5.

Таблица П1.5.Важнейшие из свойств объекта NMMsgServ

Свойство

Описание

Port

Указывает номер порта, на котором установлена данная служба

LocalIP

Содержит IP-адрес компьютера, на котором работает служба

BytesRecvd

Содержит число полученных байтов (символов) информации

BytesSent

Содержит число отправленных байтов (символов) информации

RemoteIP

Содержит IP-адрес клиента

Методы

Поскольку действия, реализуемые компонентами ыммзд и NMMsgServ в вопросах отправки и приема сообщений одинаковы, то и методы тоже одинаковы. Исключение составляет метод Listen, который вызывается достаточно редко. Дело в том, что объект NMMsgServ сразу при запуске программы начинает опрашивать порты, и поэтому искусственно вызвать его, как правило, не имеет смысла.

Для получения информации о методах данного объекта, касающихся приема/отправки информации, загляните в предыдущий раздел.

События

События, которые возникают у объектов класса NMMsgServ, представлены в табл. П1.6.

Таблица П1.6.События объекта NWsgServ

Событие

Описание

OnMSG

Возникает, когда от клиента получены данные. Процедура обработки этого события предоставляет доступ к полученному сообщению и названию клиента, указанному в параметре FromName компонента NMMsg, посредством которого со стороны клиента было установлено соединение

OnPacketRecvd

Возникает при получении данных от клиента

OnPacketSent

Возникает после отправки данных клиенту

Рекомендации по использованию

Для того чтобы система, состоящая из одного или нескольких клиентов и сервера работала нормально, приложение, использующее этот компонент, должно быть загружено с целью мониторинга новых подключений. Номером его порта должно быть число, не совпадающее с числом, характеризующим порт, в любом другом сервисе, установленным на данном компьютере. Обратите на это внимание!

После того как загружена программа, которая содержит компонент NMMsgServ, начинается мониторинг соответствующего сетевого порта. В связи с подсоединением клиента, получением от него данных, возникают различные события, которые нужно обрабатывать с целью обеспечения взаимодействия с ним.

 

Работа с FTP-сервером — компонент NMFTP

Пиктограмма компонента NMFTP представлена на рис. П1.З.

Рис. П1.3.Значок компонента NMFTP

Назначение

Компонент NMFTP представляет собой очень мощный инструмент для работы с файлами, хранящимися на FTP-сервере (подробнее про FTP-сервер читайте в гл. 1). Использование данного объекта позволяет огранизовать управление FTP-папками и файлами, а также загрузку последних на локальный компьютер или, наоборот, на сервер.

Свойства

Свойства компонента NMFTP собраны в табл. П1.7.

Таблица П1.7.Свойства компонента NMFTP

Свойство

Описание

CurrentDir

Содержит название текущего каталога на FTP-сервере

FTPDirectoryList

Содержит названия и описание подкаталогов и файлов, доступных в данном каталоге. Принадлежит к типу TFTPDirectoryList, описанному ниже

ParseList

Булевское свойство, которое указывает на необходимость данному объекту автоматически заполнять содержимое поля FTPDirectoryList при выполнении команд получения информации о содержимом каталога

Password

Содержит пароль перед установкой соединения, если FTP-сервер требует аутентификации

UserID

Содержит имя пользователя

Host

Содержит IP- или DNS-адрес сервера

Port

Указывав номер порта, на котором работает FTP-служба

Proxy

Содержит IP-адрес прокси-сервера

ProxyPort

Указывает номер порта, на котором работает прокси-сервер

BytesRecvd

Содержит число полученных байтов (символов) информации

BytesSent

Содержит число отправленных байтов (символов) информации

Следует отметить, что существует несколько вариантов аутентификации на FTP-сервере. Первый заключается в том, что администратор ресурса создает определенный список пользователей, которым доступен этот сервер. Данный вариант организации доступа подразумевает явное указание имени пользователя и пароля при входе на сервер. Второй вариант предусматривает возможность входа на сервер всех желающих, без указания каких бы то ни было учетных данных. Последний вариант является в некотором роде промежуточным. В нем пользователь в качестве параметра userio указывает слово anonymous, а в пароле — свой электронный адрес. Разумеется, права доступа к содержимому FTP-сервера определяются системным администратором ресурса.

Тип TFTPDirectoryList

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

Этот объект представляет собой несколько наборов строк, организованных по типу TStringList. Возможен доступ к следующим свойствам этого объекта:

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

Например, для получения доступа к имени первого элемента в списке элементов данного каталога нужно обратиться к свойству name[0].

Методы

Возвращаясь к описанию компонента NMFTP, приведем в табл. П1.8 его основные методы.

Таблица П1.8.Методы компонента NMFTP

Метод

Описание

Allocate

Вызывается для резервирования объема дискового пространства в количестве байтов, указанном в его параметре. Этот метод вызывается перед началом загрузки файла на сервер. При работе с большинством серверов вызывать этот метод не требуется

ChangeDir

Изменяет текущий каталог на указанный в своем параметре. Допускается использование абсолютных и относительных путей

Connect

Устанавливает соединение с сервером, параметры которого указаны в соответствующих полях компонента

Delete

Удаляет файл, имя которого указано в параметре метода. Допускается дополнительное указание абсолютных и относительных путей вместе с именем

DoCommand

Отправляет на сервер запрос на выполнение команды, указанной в качестве параметра. Существует набор стандартных команд, выполняемых FTP-сервером, которые касаются взаимодействия с клиентом

Download

Вызывается для загрузки файлов с сервера на локальный компьютер. В качестве параметров выступают имена (вместе с путями) исходного файла на сервере и конечного — на компьютере клиента

DownloadRestore

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

List

Вызывается для получения подробной информации о содержимом текущего каталога

MakeDirectory

Создает на сервере новый каталог с названием, указанным в качестве параметра. Допускается дополнительное указание абсолютного и относительного пути к создаваемому каталогу

Mode

Характеризует, в каком формате передаются и принимаются данные при приеме/отправке файлов с сервера

Nlist

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

Reinitialize

Прекращает текущие операции с сервером и выполняет новое соединение с ним

Remove Dir

Удаляет каталог, имя которого указано в параметре метода

Rename

Переименовывает файл, имя которого указано в качестве первого параметра. Вторым параметром является новое имя

Upload

Выполняет загрузку файла на сервер. Первым параметром является путь и имя исходного, а вторым — конечного файлов

UploadAppend

Аналогично предыдущему, за исключением того, что в случае, если на сервере уже имеется файл с именем, указанным в качестве параметра загрузки, Upload его перезаписывает, а UploadAppend дописывает содержимое локального файла в конец целевого

OploadRestore

Возобновляет процесс передачи содержимого файла на сервер. В качестве параметров служат две строки, содержащие имена локального и конечного файлов, а также число — текущая позиция чтения/записи файла, содержимое файла под которой не было передано в прошлый раз

UploadUnique

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

События

При работе с объектом NMFTP могут возникать события, приведенные в табл. П1.9.

Таблица П1.9.Важнейшие события объекта NMFTP

Событие

Описание

OnAuthenticationFailed

Возникает, когда проверка имени пользователя и пароля закончилась неудачей

OnAuthenticationNeeded

Возникает, когда для входа на FTP-сервер требуется указание имени пользователя и пароля (или, возможно, параметров анонимного входа, описанных выше)

OnFailure

Является следствием неудачного завершения какой-либо команды, переданной на выполнение FTP-серверу

OnSuccess

Обратно предыдущему событию

OnTransactionStart

Возникает при начале процесса передачи данных от сервера к клиенту

OnTransactionStop

Возникает при прекращении передачи данных

OnUnSupportedFunction

Является следствием неудачной попытки выполнения какой-либо команды, переданной FTP-серверу, вследствие того, что она не поддерживается сервером

Рекомендации по использованию

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

Для того чтобы использовать компонент NMFTP, необходимо поместить его в форму, в случае визуального приложения, либо в Data Module,в случае не-визульного. После этого задаются параметры FTP-сервера. Как обычно, это либо имя в DNS, либо IP-адрес и порт, на котором работает данный компонент. Если вы создаете программу общего назначения, безотносительно к самому FTP-серверу и пользователю, который будет с ней работать, то необходимо предусмотреть возможность указания имени пользователя и пароля.

Перед передачей на выполнение FTP-серверу каких-либо команд, следует вызвать метод Connect.

Если нужно получать информацию о содержимом папок, то вызывается метод Niist. После того можно считывать названия файлов и папок путем обращения к свойству FTPDirectoryList.name[n], где п — номер позиции файла или каталога в полученном списке. Для перехода к нужному каталогу вызывается метод changeDir, в параметре которого должно содержаться название этого каталога. Вслед за изменением текущего каталога, необходимо вызвать метод Niist.

Использование команды Niist, по сравнению с List, существенно сокращает время загрузки информации о содержимом каталога, но если нужно работать с полным описанием файлов, то придется обращаться к методу List.

Желательно все операции взаимодействия с FTP-сервером помещать в защищенные блоки try ... except ... finally. Это обезопасит программу от "зависания" в том случае, когда, например, пользователь пытается прочитать содержимое папки, которую системный администратор открыл только для ограниченного круга лиц, куда не входит пользователь программы. В особенности это касается процессов записи файлов на сервер, когда, даже при наличии прав чтения, пользователю может быть запрещено загружать файлы.

Для загрузки файлов с сервера пользуются методом Download. Этот метод полностью берет на себя задачу по закачиванию информации с сервера на компьютер клиента. Если во время загрузки произошла ошибка, например, вследствие отключения клиента от сети Интернет, или превышения времени ожидания сервера, из-за его чрезмерной загруженности, то принятая информация не теряется. Она сохраняется в целевом файле. Возникновение такой ситуации следует отслеживать с использованием события OnFaiiure.

Данный компонент предусматривает возможность восстановления процесса загрузки файла не сначала, а с того места, где произошел обрыв. Для этого вызывается метод DownioadRestore. Главное при вызове этого метода, чтобы на диске уже был сохранен фрагмент целевого файла. На использовании такого механизма и основано действие многочисленных программ загрузки файлов. Если необходимо информировать клиента о ходе и скорости загрузки файлов, времени, которое осталось ждать, то можно пользоваться свойством BytesRecvd. Разумеется, при отслеживании размера принятого фрагмента файла необходимо из текущего значения этого поля вычесть начальное, т. е. существовавшее в момент запроса на выполнение загрузки.

Аналогичным образом организован обратный процесс — загрузка файлов с компьютера пользователя на сервер. Тем не менее, следует учитывать отличие в вызове функции восстановления этого процесса — uploadRestore. Необходимо отслеживать, сколько байтов уже было отправлено с тем, чтобы сервер мог определять текущую позицию записи и указывать ее в качестве третьего параметра вызова этой процедуры.

Следует отметить, что компонент NMFTP, как и следующий, удобно использовать в программах, которые планируется применять в локальных сетях, подключенных к сети Интернет через прокси-сервер. Для этого, следует просто заполнить соответствующие поля данного компонента.

 

Работа с HTTP-сервером — компонент NMHTTP

Пиктограмма компонента NMHTTP приведена на рис. П1.4.

Рис П1.4.Значок компонента NMHTTP

Назначение

Компонент NMHTTP инкапсулирует в себе методы и свойства, которые обеспечивают клиент-серверное взаимодействие с использованием протокола HTTP. Данный компонент может применяться, когда нужно получать данные с сервера, минуя браузер. Кроме того, он поддерживает расширенные механизмы обмена информацией, позволяющие сохранять файлы на сервере без использования FTP-протокола.

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

Свойства

Основные свойства компонента NMHTTP описаны в табл. ШЛО.

Таблица П1.10.Свойства компонента NMHTTP

Свойство

Описание

Body

Содержит получаемый документ. Если параметр inputFileMode этого свойства установлен в true, то вместо тела сообщения в нем должно находиться имя файла, в котором сохраняются получаемые данные

Cookieln

Если заголовок полученного документа содержит cookie-данные, то они автоматически помещаются в это поле

Header

Содержит HTTP-заголовок. Если параметр inputFifeMode находится в состоянии true, то вместо данных заголовка здесь должно находиться имя файла, в который следует помещать содержимое заголовка

Headerlnfo

Представляет собой заголовок запроса, отправляемого серверу для получения документа

InputFileMode

Определяет режим работы компонента при получении данных. Если установлено значение true, то получаемая информация помещается в файлы, имена которых указаны в свойствах Body и Header. В противном случае, указанные свойства содержат сами полученные данные

Output FileMode

Аналогично предыдущему свойству, определяет режим отправки информации на сервер

SendHeader

Содержит HTTP-заголовок, отправляемый серверу

BytesRecvd

Содержит число полученных байтов (символов) информации

BytesSent

Содержит число отправленных байтов (символов) информации

Host

Содержит IP-адрес или DNS имя сервера

Port

Указывает номер порта, на котором работает Web-сервер

Proxy

Содержит IP-адрес прокси-сервера

ProxyPort

Указывает номер порта, на котором работает прокси-сервер

Методы

Основные методы объекта NMHTTP приведены в табл. П1.11.

Таблица П1.11.Методы объекта NMHTTP

Метод

Описание

Delete

Отправляет на сервер команду удаления файла, адрес которого указан в качестве параметра вызова этого метода

Connect

Устанавливает соединение с сервером

Get

Отправляет на сервер запрос на получение документа

Head

Запрашивает с сервера HTTP-заголовок, соответствующий документу, адрес которого указан в параметре

Post

Отправляет на сервер данные, указанные во втором параметре. В случае если установлен режим извлечения отправляемых данных из файла (OutputFileMode=True), то вместо данных параметр должен включать имя файла, содержащего передаваемую информацию. Первый параметр указывает адрес документа (серверного модуля), которому эти данные посылаются

Put

Создает документ на сервере. Первый параметр содержит адрес создаваемого документа, второй — сами данные, которые нужно записать в созданный файл

Trace

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

События

Основные события компонента NMHTTP приведены в табл. П1.12.

Таблица П1.12.События компонента NMHTTP

Событие

Описание

OnAboutToSend

Возникает перед отправкой запроса на сервер

OnAuthenticationNeeded

Является следствием необходимости аутентификации клиента на Web-сервере для получения документа, указанного в запросе

OnFailure

Возникает вследствие неудачного выполнения какой-либо команды, отправленной Web-серверу клиентом

OnRedirect

Возникает в случае, когда сервер вместо отправки документа указывает клиенту на необходимость перенаправления запроса на другой URL (осуществляется редирект)

OnSuccess

Возникает в случае успешного выполнения команды

Рекомендации по использованию

Компонент NMHTTP рекомендуется применять, когда необходимо создавать клиентскую программу, взаимодействующую с Web-сервером напрямую, минуя браузер. Это бывает нужно, когда получаемые данные используются не для формирования и отображения Web-страницы, а непосредственно в программе. Примером такого применения могут служить серверные модули, которые посылают клиенту XML-пакеты используя стандартные возможности CGI и обычный Web-сервер. На стороне клиента работает функциональный блок, принимающий от компонента NMHTTP XML-пакет и осуществляющий разбор полученных данных, а затем на их основании определяющий алгоритм работы программы, либо передающий полученные данные на обработку следующему элементу информационной системы.

Чтобы запросить у сервера данные, необходимо прежде всего заполнить параметры используемого сервера — IP-адрес или DNS имя и порт, а затем вызвать метод connect. Как правило, Web-службы работают на порту с номером 80. Если требуется сразу сохранить в файле полученные данные, минуя непосредственно этап их анализа и обработки, то следует установить поле inputFiieMode в значение true. Кроме того, до запроса документа в поле Body задается имя файла, в который этим компонентом будет помешаться полученная информация. В случае, когда сообщение будет использовано сразу, поле inputFiieMode устанавливается в значение false. Тогда после выполнения запроса в свойстве Body будет находиться полученный документ.

Для получения документа необходимо послать на сервер команду его отправки. Простейшим вариантом реализации этого, является обращение к методу Get. Его вызов требует указание единственного параметра — URL документа. Если запрашивается динамическое содержимое, генерируемое серверным модулем, то может потребоваться указание параметров, способ формирования которых описан в гл. 9. Разумеется, при этом серверный модуль должен использовать Get-метод получения клиентских данных. Подробную информацию о том, как писать такие серверные программы, читайте в гл. 9.

Другим возможным вариантом передачи данных на сервер является метод Post. В этом случае происходит передача сведений не в части URL, а в теле HTTP-запроса, что удобно для отправки больших блоков информации. Данный метод, как и предыдущий, приводит к получению нового документа с сервера и вызывается путем обращения к методу объекта NMHTTP с аналогичным названием — Post. Подробнее о параметрах вызова этого метода читайте в табл. П1.11 этого приложения.

Следует отметить, что компонент МНТТР поддерживает функции создания на сервере файлов, с последующей записью в них информации. Данная возможность обеспечивается использованием метода Put. В настоящее время многие Web-серверы не поддерживают этот метод, и поэтому лучше избегать использования такого варианта загрузки файлов на сервер и вместо него применить компонент NMFTP и его более широкие возможности по удаленной работе с файлами.

 

Работа с сервером новостей — компонент NMNNTP

Пиктограмма этого компонента представлена на рис. П1.5.

Назначение

Данный компонент предназначен для создания клиентской части системы работы со службами новостей.

Рис. П1.5.Значок компонента NMNNTP

В его основные функции входит:

Свойства

Основные свойства компонента NMNNTP сведены в табл. П1.13.

Таблица П1.13.Свойства компонента NMNNTP

Свойство

Описание

AttachFilePath

Определяет название каталога, в котором сохраняются файлы, прикрепляемые к сообщениям при загрузке последних с сервера новостей

Attachments

Содержит список файлов, прикрепленных к данной статье

Body

Содержит тело загруженного сообщения

CacheMode

Определяет режим кэширования сообщений. Принимает три возможных значения: cmLocal, cmMixed, cmRemote. В первом случае загрузка сообщений происходит из кэша, в котором ранее были сохранены данные. Второй тип предусматривает получение данных с сервера новостей, но при этом вся полученная информация кэшируется на компьютере клиента. Последний тип предусматривает работу с сервером в режиме без использования локального кэша

CurrentArticle

Содержит номер текущей статьи в списке всех сообщений данной группы новостей

GroupList

Это объект типа TstringList, содержащий список всех групп новостей, которые предлагает данный сервер

Header

Содержит заголовок текущей статьи

HeaderRecord

Содержит описание текущей статьи. Данные представлены в формате TpostRecordType, описанном ниже

HiMessage

Содержит номер верхнего документа в текущей загруженной новостной группе

LoMessage

Содержит номер нижнего документа в текущей загруженной новостной группе

ParseAttachments

Включает режим автоматического извлечения приложенных файлов из сообщений и последующего их сохранения в папке, заданной параметром AttachFilePath

Password

Содержит пароль для аутентификации на сервере новостей

Post Attachments

Это объект типа TStringList, содержащий пути и имена файлов, которые следует прикрепить к отправляемому сообщению

PostBody

Содержит само содержание помещаемой на сервер статьи

PostHeader

Содержит заголовок отправляемого на NNTP-сервер сообщения

Posting

Определяет, можно ли отправлять на сервер подготавливаемое сообщение

PostRecord

Содержит описание посылаемой статьи

SelectedGroup

Содержит текущую группу новостей

Userld

Содержит имя пользователя для аутентификации на сервере новостей

Host

Содержит IP-адрес или DNS имя NNTP-сервера

Port

Указывает номер порта, на котором работает сервер новостей

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

Методы

Основные методы объекта NMNNTP описаны в табл. П1.14.

Таблица П1.14.Методы объекта NMNNTP

Метод

Описание

Connect

Устанавливает соединение с сервером новостей

GetArticle

Загружает статью под номером, указанным в параметре метода, и делает ее текущей

GetArticleBody

Загружает только само сообщение, хранящееся на сервере под номером, указанным в параметре метода

GetArticleHeader

Загружает только заголовок сообщения, хранящегося на сервере под номером, указанным в параметре метода

GetArticieList

Загружает список сообщений с сервера. При этом, возможно получать только часть сообщений (первый параметр метода устанавливается в true), начиная с номера, указанного во втором параметре

GetGroupList

Загружает перечень новостных групп, доступных на сервере новостей

PostArticle

Отправляет подготовленное сообщение на сервер

SetGroup

Устанавливает группу новостей, указанную в параметре метода, текущей

События

Данный компонент имеет возможность обработки множества ситуаций, которые могут возникнуть при работе с сервером новостей. Ключевым событием является onArticie, означающее успешное получение статьи, а также всех приложений, которые к ней относятся.

Рекомендации по использованию

Для применения данного компонента, прежде всего, нужно задать параметры сервера новостей. После этого следует определить режим кэширования информации. Если предполагается использовать режим online во все время работы приложения и скорость доступа к серверу высока, то можно использовать режим cmRemote. В случае, когда эти условия не выполняются, необходимо совмещать режимы cmMixed и cmLocal. Во время работы в первом из них, нужно синхронизировать кэш с изменениями, которые произошли за момент последней синхронизации. Достигается это путем последовательного перебора всех статей выбранной группы новостей. После проведения этой операции можно работать в режиме cmLocal, что позволяет работать с кэшем подобно серверу новостей.

После установки всех параметров соединения с сервером можно выполнять метод connect, а затем — процедуру GetGroupList, которая обновит значение свойства GroupList, содержащего названия доступных новостных групп.

Проведя процедуру выбора необходимой группы, нужно с помощью метода SetGroup сделать ее текущей. Вслед за установкой активной группы можно загружать банк сообщений. Это производится методом GetArtideList.

Для доступа к конкретному сообщению необходимо знать его номер, и указывая его в качестве параметра, вызвать метод GetArticie, который загружает данное сообщение и делает его текущим. Вслед за этим можно обращаться к телу сообщения и приложениям. Для удобства работы компонент NMNNTP может автоматически извлекать приложения и сохранять их в каталоге, указанном в свойстве AttachFilePath. Для активизации этой возможности следует значение свойства ParseAttachments установить в true.

В случае, когда клиент должен иметь возможность поместить собственное сообщение, необходимо заполнить поля свойства PostRecord, записать содержимое размещаемой статьи в свойство PostBody и, если это необходимо, указать пути к приложенным файлам в свойстве PostAttachments. Когда все готово к отправке, остается установить свойство Posting в true и выполнить процедуру PostArticle.

 

Работа с серверами электронной почты

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

Прежде всего, нужно заметить, что существует несколько протоколов для работы с электронной почтой. Для отправки сообщений, как правило, используются SMTP-серверы, а для приема — РОРЗ-серверы. Создание собственных почтовых серверов — непростая задача, которая уже с успехом реализована многими производителями программного обеспечения. Интернет-программистам остается лишь создать удобный Web-интерфейс для работы с электронной почтой.

На вкладке FastNet имеется два компонента, предназначенных для взаимодействия с почтовыми серверами: NMSMTP и NMPОРЗ, пиктограммы которых изображены на рис. П1.6.

Рис. П1.6.Компоненты, предназначенные для работы с сервером электронной почты

Эти компоненты разделяют обязанности по отправке и приему электронной почты. Первый компонент — NMPOPS получает почту и управляет содержимым ящика на сервере, a NMSMTP — служит для отправки сообщений через SMTP-сервер.

 

Получение почтовых сообщений — компонент NMPOP3

Назначение

Данный компонент предназначен для приема и менеджмента сообщений, хранящихся на почтовых серверах, которые взаимодействуют с клиентами по протоколу РОРЗ. Он имеет следующие основные функции:

Свойства

Данный компонент обладает свойствами, приведенными в табл. П1.15.

Таблица П1.15.Свойства компонента NMPOPS

Свойство

Описание

AttachFilePath

Содержит название каталога, в который объекту следует помещать приложенные к письмам файлы, и путь к нему

DeleteOnRead

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

MailCount

Содержит число писем, хранящихся в почтовом ящике

MailMessage

Принадлежит к типу TMailMessage, который будет описан ниже. В нем содержится текущее сообщение, а также его параметры

Password

Содержит пароль для доступа к почтовому ящику

Summary

Представляет собой описание текущего сообщения. Подробное описание типа TSuinmary, в виде которого представлены данные, дано ниже

UserlD

Содержит имя пользователя для аутентификации на РОРЗ-сервере

Host

Содержит IP-адрес или DNS имя РОРЗ-сервера

Port

Указывает номер порта, на котором работает сервер

Два свойства компонента принадлежат к специальным типам: TMailMessage и TSummary. Они используются для собрания свойств сообщения в одном свойстве.

Тип TMailMessage

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

Тип TSummary

Это тоже запись. В ней присутствуют несколько полей, в которых хранятся описательные характеристики письма:

Для доступа к перечисленным параметрам сообщений необходимо интересуемое письмо сделать активным.

Методы

Основные методы компонента NMРОРЗ сведены в табл. П1.16.

Таблица П1.16.Методы компонента NMРОРЗ

Метод

Описание

UniqueID

Возвращает идентификатор письма на сервере по его номеру

DeleteMailMessage

Удаляет в почтовом ящике на сервере письмо С номером, указанным в параметре метода. Удаление происходит не сразу, в связи с чем, до окончания текущей сессии работы с сервером, удаленные письма можно восстановить

GetMailMessage

Загружает и делает активным письмо с номером, указанным в параметре метода

GetSummary

Получает с сервера описание письма с номером, указанным в параметре метода

List

Последовательно загружает номера и размеры всех сообщений с сервера. Используется совместно с событием OnList

Reset

Снимает пометку об удалении со всех писем, на которых она была установлена

События

События, которые могут возникать при работе объектов класса NMРОРЗ, приведены в табл. П1.17.

Таблица П1.17.События компонента NMРОРЗ

Событие

Описание

OnAuthenticationFailed

Возникает по причине неудачного завершения попытки войти в почтовый сервер с указанными именем пользователя и паролем

OnAuthenticationNeeded

Возникает в случае, когда данные аутентификации (имя пользователя и пароль) указаны не полностью

OnDecodeStart

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

OnFailure

Является следствием неудачного завершения попытки удаления или получения идентификатора сообщения

OnList

Сопровождает получение параметров каждого нового сообщения в процессе выполнения метода List. Позволяет сохранить данные для дальнейшего использования в программе

OnReset

Является следствием выполнения команды Reset

OnRetrieveEnd

Возникает в результате завершения получения письма

OnRetrieveStart

Возникает перед началом процесса получения нового письма с сервера

OnSuccess

Возникает при успешном выполнении команды об установке пометки "как удаленное" для писем, находящихся на сервере

Рекомендации по использованию

Существует несколько контекстных вариантов использования компонента NMРОРЗ. Как в случае создания клиентской программы, так и разработки серверного модуля, который, взаимодействуя с клиентом, создает промежуточный слой между его браузером и почтовым сервером, решается ряд общих задач. Различия заключаются в способе обработки получаемых данных. Почтовый клиент сохраняет их в собственную базу данных, а серверный модуль формирует Web-страницы на основании полученных клиентом писем. Для хранения писем на компьютере клиента, как правило, используется специальный файл, представляющий собой базу данных принятых писем. В качестве такой базы, в большинстве случаев, используется текстовый файл, в котором сообщения определенным образом отделяются друг от друга. Формат этого файла определяется программистом. Чтобы сделать работу с программой комфортной, обычно сохраняют отправленные сообщения, а также другие данные, например, черновики.

Для создания почтового клиента либо Web-серверного модуля требуется определить, где и в каком формате будут храниться принятые и отправленные сообщения. Если нужно предусматривать возможность для создания пользователем новых папок, в которых он сможет хранить информацию по своему усмотрению, то лучше сразу разрабатывать гибкое решение, чтобы вся информация хранилась единообразно. В случае написания серверного модуля, использование базы данных вряд ли приемлемо. Дело в том, что сообщения могут быть очень велики, что делает их хранение в обычной базе проблематичным. Лучше разработать формат хранения данных в виде файла.

Как один из возможных вариантов создания Web-почты, может быть отведение для каждого пользователя каталога на жестком диске сервера с помещением в него почтовых файлов. В этом случае, отличие алгоритма работы серверного модуля от клиентской программы заключается лишь в форме организации интерфейса.

К основным задачам компонента NМРОРЗ следует отнести извлечение писем с почтового сервера, удаление их из ящика, передача полученных сообщений для обработки в клиентскую программу.

Для того чтобы получить письмо, нужно заполнить идентификаторы учетной записи пользователя на почтовом сервере, параметры самого сервера, и вызвать метод connect.

Обычно пользователя сначала сжатым образом информируют о письмах, хранящихся на сервере. То есть отображается список из кратких описаний сообщений, в котором каждому письму соответствует тема, размер, дата получения и отправитель. Чтобы получить информацию такого рода, вначале необходимо выяснить, сколько писем хранится в почтовом ящике (свойство Maiicount), затем, последовательно перебирая их в цикле, вызвать метод Getsuinmary, чтобы заполнить свойство summary и, таким образом, получить возможность использования описания каждого из писем.

После выбора пользователем конкретного письма для загрузки нужно обратиться к методу GetMaiiMessage, после чего, текст сообщения будет доступен в свойстве GetMaiiMessage.Body, а прикрепленные к письму файлы будут находиться В каталоге AttachFilePath. .

 

Компонент NMSMTP

 Назначение

Компонент предназначен для создания и отправки писем адресатам через SMTP-сервер.

Свойства

Свойства компонента NMSMTP собраны в табл. П1.18.

Таблица П1.18.Свойства компонента NMSMTP

Свойство

Описание

ClearParams

Включает или отключает функцию удаления содержимого и параметров посланного письма из соответствующих полей компонента

EncodeType

Содержит тип системы кодирования, используемой при отправке приложенных файлов

FinalHeader

Содержит заголовок отправляемого сообщения

PostMessage

Принадлежит к типу TPostMessage, который и содержит посылаемое письмо и его атрибуты

SubType

Содержит формат отправляемого сообщения

UserID

Содержит идентификатор пользователя на SMTP-сервере

Host

Содержит IP-адрес или DNS имя SMTP-сервера

Port

Указывает номер порта, на котором работает SMTP-сервер

Можно заметить, что параметры компонента NMSMTP не содержат пароля. Связано это с тем, что, как правило, SMTP-сервера не требуют полной аутентификации, в лучшем случае ограничиваясь только именем пользователя. Свойство SubType указывает на тип разметки отправляемого письма.

Тип данных TPostMessage

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

Вся информация, которую может содержать эта запись, разгруппирована по следующим полям:

Методы

Методы компонента NMSMTP описаны в табл. П1.19.

Таблица П1.19.Методы компонента NMSMTP

Метод

Описание

ExpandList

Возвращает список адресов пользователей SMTP-сервера

ExtractAddress

Вызывается для извлечения электронного адреса из строки-параметра вызова функции

Verify

Служит для проверки существования на SMTP-сервере пользователя, название учетной записи которого указано в параметре метода

Clear Parameters

Удаляет из свойств объекта всю информацию, относящуюся к подготавливаемому сообщению

SendMail

Отправляет подготовленное письмо

События

События компонента NMSMTP описаны в табл. П1.20.

Таблица П1.20.События компонента NMSMTP

Событие

Описание

OnAttachmentNotFound

Возникает, когда не найдены файлы, указанные в свойстве PostMessage. Attachments

OnAuthenticationFailed

Является следствием неверно указанного имени пользователя, из-за чего SMTP-сервер не выполняет процедуру аутентификации

OnEncodeEnd

Возникает после завершения процедуры вложения файлов в сообщение

OnEncodeStart

Возникает непосредственно перед началом кодирования содержимого прикрепленных файлов, с целью добавления его в сообщение

OnFailure

Возникает вследствие неудачного завершения попытки отправить письмо

OnHeader Incomplete

Появляется из-за попытки отправить письмо с неуказанным адресом отправителя или получателя

OnMailListReturn

Сопровождает получение списка электронных адресов с SMTP-сервера

OnRecipientNotFound

Возникает при неверном указании электронного адреса получателя

OnSendStart

Предваряет отправку сообщения на сервер

OnSuccess

Сопровождает успешную доставку электронного письма

Рекомендации по использованию

С самого начала использования компонента NMSMTP в программе необходимо задать имя сервера (или его IP-адрес) и порт, на котором работает SMTP-служба.

Для того чтобы сформировать сообщение, нужно заполнить поля свойства PostMessage. Полям, содержащим электронный адрес отправителя и получателя, необходимо обязательно присвоить соответствующие значения. Само письмо может быть простым текстом, набранным в кодировке ASCII, либо полноценной Web-страницей. В зависимости от типа форматирования, нужно указать его название в свойстве subType.

После того как формирование сообщения завершено, можно, используя метод connect, подключаться к серверу и методом SendMail отправлять письмо.

 

Кодирование и декодирование данных, посылаемых в запросах — компонент NMURL

Пиктограмма этого компонента показана на рис. П1.7.

Рис. П1.7.Значок компонента NMURL

Назначение

Компонент NMURL предназначен для простой, но в тоже время очень часто используемой, особенно серверными модулями, операции: приведение данных, полученных через переменные окружения, к стандартному виду, и наоборот — кодирование информации для передачи ее в среде WWW. Подробное описание представления данных, передаваемых в качестве параметров GET-запроса, читайте в гл. 9.

Свойства

Ключевым свойством данного объекта является inputstring, куда помешается строка для последующего кодирования/декодирования.

Результат кодирования помешается в свойство Encode. После такой обработки, данные можно передавать по сети Интернет, не опасаясь за прохождение специальных символов и кириллицы через множество различных систем.

Если необходимо наоборот декодировать полученные, например при Get-запросе, данные, то обращаются к свойству Decode, возвращающему исходную строку.

Методы

У данного объекта ключевые методы отсутствуют в связи с тем, что вся работа с ним проходит через его свойства.

События

Единственным событием является onError, которое может возникнуть в случае появления ошибки при кодировании/декодировании данных.

Рекомендации по использованию

Использовать компонент NMURL очень просто. Достаточно поместить его на форму или в модуль данных, присвоить некоторое значение свойству inputstring и извлечь требуемые данные из параметра Encode или Decode, в зависимости от того, что требовалось сделать с ними.

 

Кодирование и декодирование файлов, передаваемых посредством Интернета — компонент NMUUProcessor

Пиктограмма компонента NMUUProcessor изображена на рис. П1.8.

Рис. П1.8.Значок компонента NMUUProcessor

Назначение

Компонент NMUUProcessor предназначен для приведения данных, содержащихся в потоках, к виду, пригодному для их передачи через Интернет и локальные сети, а также восстановления закодированных исходных данных. Он поддерживает две основные системы кодирования: MIME (Multimedia Internet Mail Extension) и UUEncoding (Unix to Unix Encoding). Наибольшую пользу из компонента NMUUProcessor можно извлечь, используя его совместно с файловыми потоками.

Свойства

Свойства компонента NMUUProcessor описаны в табл. П1.21.

Таблица П1.21.Свойства компонента NMUUProcessor

Свойство

Описание

InputStream

Содержит входной поток данных

Method

Указывает метод кодирования/декодирования

OutputStream

Содержит результирующий поток данных

Методы

Методы компонента muuprocessor сведены в табл. П1.22.

Таблица П1.22.Методы компонента muuprocessor

Метод

Описание

Decode

Приводит данные из потока inputstream к исходному виду (бывшему до кодирования и передачи) в соответствии с методом, указанным в свойстве Method

Encode

Кодирует данные из потока inputstream в соответствии с методом, указанным в параметре Method, и помещает результат в поток OutputStream

События

События компонента NMUUProcessor описаны в табл. П1.23.

Таблица П1.23. События компонента NMUUProcessor

Событие

Описание

OnBeginEncode

Возникает перед началом процесса кодирования содержимого потока

OnEndEncode

Возникает вслед за окончанием процесса кодирования

OnBeginDecode

Возникает перед началом процесса декодирования содержимого потока

OnEndDecode

Возникает вслед за окончанием процесса декодирования

Рекомендации по использованию

Как правило, при использовании обычных компонентов, предназначенных для работы с Интернетом, нет нужды вручную кодировать или декодировать данные. Компонент NMUUProcessor применяется при создании собственных серверов и программ, осуществляющих обмен файлами или другими типами данных через сеть. Чтобы закодировать данные, необходимо создать поток, поместить в него данные и указать его имя в свойстве inputstream. Если затем задать метод кодирования, а в свойстве OutputStream указать имя выходного потока, то можно вызывать метод Encode. Разработка процесса декодирования данных происходит аналогично.

 

Работа с обобщенным сокетом — компонент PowerSock

Пиктограмма компонента PowerSock изображена на рис. П1.9.

Рис. П1.9.Значок компонента PowerSock

Назначение

Данный компонент представляет собой обобщенный сокет, инкапсулирующий в себе средства как для работы на стороне клиента, так и на стороне сервера. Подробное описание работы с сокетами читайте в гл. 13. Здесь будут рассмотрены лишь вопросы, специфичные для данного компонента.

Итак, данный компонент осуществляет передачу, прием данных через сеть, а также управляет внешними подключениями со стороны других сокетов, производимых с целью того же клиент-серверного взаимодействия. В отличие от сокетов, которые расположены на вкладке Internetпалитры компонентов, данный объект представляет собой единую структуру, предназначенную для работы на любом участке системы — как на стороне сервера, так и на стороне клиента. Это достигается путем включения в один объект всех требуемых свойств и методов.

Свойства

При использовании компонента PowerSock доступны свойства, описанные в табл. П1.24.

Таблица П1.24. Свойства объекта PowerSock

Свойство

Описание

BytesRecvd

Содержит число полученных байтов информации

BytesSent

Содержит число отправленных байтов информации

BytesTotal

Содержит общее число полученных и отправленных байтов

Connected

Содержит булевское свойство, которое означает— подключен ли сокет в данный момент времени к другому компьютеру

Handle

Содержит Handle сокетного соединения

Host

Указывает IP-адрес или DIMS имя удаленного компьютера

LastErrorNo

Включает код, соответствующий последней возникшей ошибке

LocalIP

Указывает IP-адрес компьютера, на котором запущена программа, использующая данный сокет

Port

Определяет номер порта, используемого сокетом удаленного компьютера, с которым производится соединение

Proxy

Указывает IP-адрес прокси-сервера

ProxyPort

Содержит номер порта, на котором работает прокси-сервер

Status

Содержит статус состояния компонента

TimeOut

Определяет время в миллисекундах (0,001 с), в течение которого сокет будет ожидать ответа от удаленного компьютера

Методы

Методы компонента Powersock описаны в табл. П1.25.

Таблица П1.25.Методы компонента PowerSocket

Метод

Описание

CaptureFile

Записывает все данные, принимаемые сокетом, посредством которого происходит обмен данными, в файл

CaptureStream

Аналогично предыдущему, но запись происходит в поток. В нем можно ограничить число записываемых символов, путем указания их числа во втором параметре вызова метода. Если нужно поместить в поток все символы, полученные от сервера, то в качестве параметра помещается — 1. Первый параметр вызова метода определяет поток, в который помещаются данные

CaptureString

Полностью аналогичен предыдущему методу, но запись идет в строковый параметр

Connect

Производит попытку соединиться с сокетом на удаленном компьютере

Disconnect

Разрывает текущее соединение с удаленным компьютером (сервером или клиентом)

Listen

Переводит сокет, работающий в серверном режиме, в состояние готовности к подключению клиентов

read

Возвращает строку, состоящую из символов, полученных от сервера, в количестве, указанном в параметре метода

ReadLn

Возвращает строку, состоящую из символов, полученных от сервера. Запись в результат заканчивается, как только среди них встретился символ перевода строки

SendFile

Отсылает содержимое файла, имя которого указано в качестве параметра метода

SendStream

Отсылает поток, указанный в параметре метода

Transaction

Передает на сервер команду или запрос, указанный в параметре. Возвращает содержимое ответа сервера на отправленный запрос

write writeln

Посылает на сервер строку, указанную в параметре метода

Посылает на сервер строку, указанную в параметре метода, добавляя в ее конец служебный символ конца строки

События

События, которые могут возникать при работе описываемого компонента, представлены в табл. П1.26.

Таблица П1.26.События компонента PowerSock

Событие

Описание

OnAccept

Возникает, когда клиент производит попытку соединения с данным сокетом (условием появления события является приведение сокета в состояние опроса порта методом Listen с параметром, равным false)

OnConnect

Появляется вслед за успешным соединением с другим компьютером

OnConnectionFailed

Возникает в результате неудачного завершения попытки соединения

OnConnect ionRequired

Появляется вследствие обращения к методам, которые для своей работы требуют соединения с удаленным компьютером

OnDisconnect

Возникает после рассоединения с клиентом

OnError

Возникает в случае появления ошибки в работе сокета

OnHostResolved

Возникает после удачной попытки получения IP-адреса по имени хоста через службу DNS

OnlnvalidHost

Появляется вследствие невозможности нахождения IP-адреса через службу DNS из-за некорректного имени (URL) искомого сервера

OnPacketRecvd

Возникает при получении данных от клиента

OnPacketSent

Сопровождает отправку данных удаленному компьютеру

OnRead

Свидетельствует о необходимости извлечения данных из сокета

OnStatus

Появляется при изменении состояния сокета

Рекомендации по использованию

Компонент PowerSock, как уже отмечалось, используется для организации клиент-серверного взаимодействия в рамках локальных сетей, а также сети Интернет. Если создается клиентская программа, то для соединения с сервером необходимо установить его адрес и порт, на котором работает служба, заполнив соответствующие свойства объекта. После этого, можно вызывать метод Connect для установки соединения. Если же работа идет на стороне сервера, то нужно вызвать метод Listen для разрешения подключения клиентов.

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

 

Вкладка Internet

Данная вкладка содержит компоненты, реализующие общие задачи клиент-серверного взаимодействия и создания серверных программ.

Большинство из компонентов, которые располагаются на этой вкладке, уже были описаны, и поэтому здесь рассматриваться не будут. Чтобы узнать о компонентах ClientSocket, ServerSocket, PageProducer, QueryTableProducer, Следует Обратиться К\к гл. 10 и 13. КомпонентыDataSetPageProducer и DataSetTableProducer представляют собой составную часть комплексной технологии DataSet, используемой в Delphi, рассмотрение которой выходит за рамки этой книги, и поэтому их описание будет опущено.

Следует отметить, что объект webDispatcher используется создаваемым Web-серверным приложением автоматически. По сути, Web-модуль, которым мы пользовались при создании серверных программ на основе невизуальных компонентов, — это модуль данных, в котором уже присутствует компонент webDispatcher. Описание действий, управление ими, а также организация и создание алгоритма работы модуля на основе рассмотренных действий приведено в гл. 10.

 

Компонент WebBrowser

Значок компонента WebBrowser представлен на рис. П1.10.

Рис. П1.10.Значок компонента WebBrowser

Назначение

Данный компонент представляет собой элемент управления ActiveX. Это значит, что на самом деле программа, используя данный компонент, обращается к программным ресурсам компьютера и использует Internet Explorer(IE), установленный в операционной системе Windows. Этот компонент может выполнить все те операции, которые заложены в IE, поэтому его использование позволяет сделать создаваемую программу очень функциональной. Для того чтобы созданная программа корректно работала на компьютере конечного пользователя, в его системе должен быть установлен IE версии не ниже 4.0. Разумеется, это требование автоматически выполняется, если используется операционная система Windows 98 или более новая.

Свойства

Свойства объекта WebBrowser сведены в табл. П1.27.

Таблица П1.27. Свойства объектаWebBrowser

Свойство

Описание

Busy

Булевское свойство, которое принимает значение true, когда элемент управления находится в состоянии выполнения текущей операции

Document

Обеспечивает доступ к интерфейсу управления исходным кодом Web-страницы

LocationName

Содержит короткое имя текущего документа

LocationURL

Содержит URL текущего документа

Offline

Позволяет перевести компонент в offline-режим работы

Silent

Определяет, может ли WebBrowser отображать диалоговые окна

Visible

Булевское свойство, определяющее, отображается ли компонент на форме

Методы

Методы компонента WebBrowser сведены в табл. П1.28.

Таблица П1.28. Методы компонента WebBrowser

Метод

Описание

GoBack

Загружает в WebBrowser страницу, предыдущую по очереди навигации (History)

Go Forward

Загружает в WebBrowser страницу, следующую по очереди навигации (History)

GoHome

Загружает в WebBrowser домашнюю страницу

GoSearch

Загружает в 7 поисковую страницу

Navigate

Загружает страницу, URL которой помещен в параметр вызова процедуры

Refresh

Обновляет текущую страницу

Stop

Останавливает загрузку документа в WebBrowser

События

События экземпляров класса TWebBrowser сведены в табл. П1.29.

Таблица П1.29. События компонента WebBrowser

Событие

Описание

OnBeforeNavigate2

Возникает перед началом процесса навигации документа

OnDownloadBegin

Возникает перед началом процесса загрузки документа В WebBrowser

OnProgressChange

Возникает, когда изменяется состояние загрузки документа, т. е. получена очередная порция данных с сервера

OnDownloadComplete

Возникает, когда загрузка документа завершена, независимо от ее успешности

OnDocumentComplete

Возникает, когда процесс навигации документа завершен

Замечание 

В данных событиях различают два очень сходных понятия — "загрузка документа" и "навигация". Первый процесс означает получение файлов из сети Интернет, а второй — переход к новой странице, ее загрузка и отображение.

Рекомендации по использованию

Для того чтобы использовать компонент WebBrowser, его необходимо поместить в форму приложения, установить размеры и положение, а затем в программе вызвать метод Navigate для загрузки нужного Интернет-ресурса.