ПРИЛОЖЕНИЕ 1
Описание некоторых компонентов клиент-серверной версии Delphi
Данное приложение предусмотрено как справочный раздел, содержащий структурированную по вкладкам Component Palette информацию о некоторых компонентах. Кроме сводных таблиц о методах и свойствах объектов, являющихся экземплярами классов, представленных соответствующими компонентами, здесь находится также их краткое описание общего характера и рекомендации по использованию.
На этой вкладке находятся компоненты, представляющие собой очень богатый по функциональным возможностям набор и обеспечивающие простую реализацию практически всех распространенных задач.
Замечание
Эта вкладка была создана не самой корпорацией 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 предназначены для выполнения следующих основных операций:
Обратите внимание, что в отличие от обмена данными с помощью компонентов 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. .
Назначение
Компонент предназначен для создания и отправки писем адресатам через 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.
Данная вкладка содержит компоненты, реализующие общие задачи клиент-серверного взаимодействия и создания серверных программ.
Большинство из компонентов, которые располагаются на этой вкладке, уже были описаны, и поэтому здесь рассматриваться не будут. Чтобы узнать о компонентах ClientSocket, ServerSocket, PageProducer, QueryTableProducer, Следует Обратиться К\к гл. 10 и 13. КомпонентыDataSetPageProducer и DataSetTableProducer представляют собой составную часть комплексной технологии DataSet, используемой в Delphi, рассмотрение которой выходит за рамки этой книги, и поэтому их описание будет опущено.
Следует отметить, что объект webDispatcher используется создаваемым Web-серверным приложением автоматически. По сути, Web-модуль, которым мы пользовались при создании серверных программ на основе невизуальных компонентов, — это модуль данных, в котором уже присутствует компонент webDispatcher. Описание действий, управление ими, а также организация и создание алгоритма работы модуля на основе рассмотренных действий приведено в гл. 10.
Значок компонента 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 для загрузки нужного Интернет-ресурса.