3. Компоненты Indy

TCP                              cl                     serv

UDP                             cl                     serv

DNSresolver              cl

IMAP4                                                serv

POP3                           cl

SMTP                           cl

ICMP                           cl

SNTP                           cl                    

DateTime                     cl                     serv

FTP                               cl                     serv

trivialFTP                   cl                     serv

HTTP                           cl                     serv

Simple                          serv

IRC                                                       serv

NNTP                          cl                     serv

Time                              cl                     serv

mapeedPortTCP                                serv

WhoIs                          cl                     serv

Echo                             cl                     serv

finger                            cl                     serv

Telnet                           cl                     serv

TunelMaster TunelSlave                serv

MISC

AntiFreez

IPWatch

LogDebug

Message

NetworkCalculator

DateTimeStamp

Base64Encoder

UUEncoder

XXEncoder

threadMgrdefult

threadMgrPool

VCard

conectInterceptOpenSSL serverInterceptOpenSSL

Набор компонентов разделен на три группы: клиентские (Indy Client), серверные (Indy Servers) и вспомогательные (Indy Misc).

Indy Clients и Indy Servers

Большинство компонентов Indy Client и Indy Servers представляют собой пары, соответствующие клиентским и серверным частям протоколов и служб (за исключением отдельных, в основном серверных, компонентов типа TunnelMaster и TunnelSlave), и позволяют использовать такие протоколы, как TCP/IP, UDP, NNTP, SMTP, FTP, HTTP, а также службы ECHO, FINGER, WHOIS и т.д.

Клиентские компоненты Indy написаны с использованием сокетов. Сокет со стороны клиента требует соединения с сервером. Если связь установлена, клиент и сервер могут начинать обмен сообщениями. Эти сообщения носят различный характер, но обычно обмен происходит по определенномупротоколу (например, НТТР)

TIdTCPClient и TIdTCPServer

Эти компоненты используются для поддержки одного из основных сетевых протоколов — TCP (Transmission Control Protocol), а также являются базовыми классами для компонентов TIdSMTP и TIdFTP. Класс TIdTCPServer обладает свойством ThreadMgr, по умолчанию равным nil. Если ThreadMgr равно nil, когда TIdTCPServer активизирован, класс TIdThreadMgrDeafault будет создан неявно. В противном случае используется установленный менеджер процессов.

TCP (англ. Transmission Control Protocol — протокол управления передачей) — один из основных сетевых протоколов Internet, предназначенный для управления передачей данных в сетях и подсетях TCP/IP. TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в безошибочности получаемых данных, осуществляет повторный запрос данных в случае потери пакетов и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP, TCP гарантирует, что приложение получит данные точно в такой же последовательности, в какой они были отправлены, и без потерь.

TIdUDPClient и TIdUDPServer

Эти компоненты используются для поддержки сетевого протокола UDP (User Datagram Protocol), а также являются базовыми классами для ряда других компонентов Indy.

UDP (англ. User Datagram Protocol — протокол пользовательских датаграмм) — это транспортный протокол для передачи данных в сетях IP. Он является одним из самых простых протоколов транспортного уровня модели OSI.  В отличие от TCP, UDP не гарантирует доставку пакета, поэтому аббревиатуру иногда расшифровывают как «Unreliable Datagram Protocol» (протокол ненадёжных датаграмм). Это позволяет ему гораздо быстрее и эффективнее доставлять данные для приложений, которым требуется большая пропускная способность линий связи, либо требуется малое время доставки данных.

TIdChargenServer

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

TIdDayTime и TIdDayTimeServer

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

TIdDNSResolver

Это клиентский компонент, обслуживающий запросы от сервера DNS (Domain Name Service). Запросы DNS-сервера предназначены для замены имени компьютера на его IP-адрес. TIdDNSResolver является наследником класса TIdUDPClient.

TIdDICTServer

Серверный компонент, поддерживающий протокол Dictionary Server Protocol (DICT) — серверный словарь на базе TCP-протокола, который позволяет клиенту получать доступ к словарю естественного языка.

TIdDISCARDServer

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

77 dEcho и TI dECHOServer

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

TIdFinger и TIdFingerServer

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

TIdFTP

Компонент включает полную поддержку протокола передачи файлов — FTP (File Transfer Protocol). Поддерживается пассивная и активная передача данных, а также такие операции, как GET и PUT, удаление директорий, получение квот, размеров файлов и каталогов. В своей работе TIdFTP использует класс TIdSimpleServer. Когда выполняется передача файла по протоколу FTP, вторичное соединение по протоколу TCP открыто для передачи данных и закрывается, когда данные были переданы. Такое соединение называется «канал передачи данных», уникальный для каждого передаваемого файла.

TIdGopher и TIdGopherServer

Эти компоненты предназначены для обеспечения сетевого протокола, вытесненного в последнее время из WWW (World Wide Web) протоколом HTTP. Сервер, реализующий этот протокол, обеспечивает иерархическую распределенную систему поддержки документооборота. Пример использования этой пары компонентов, находящийся в директории \demos\indy\GopherClient и \demos\indy \GopherServer, демонстрирует, как при помощи этого протокола можно предоставлять в локальной сети информацию о файлах, находящихся на вашем компьютере, в том числе и о закрытых.

TIdHostNameServer

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

ТIdНТТР и TIdHTTPServer

Компоненты используются для обеспечения сетевого протокола HTTP (поддерживаются версии 1.0 и 1.1, включая операции GET, POST и HEAD). Кроме того, обеспечивается поддержка аутентификации и применения proxy-серверов. Серверный компонент используется для предоставления услуг другому Web-серверу, поддерживающему данный протокол. TIdHTTPServer облегчает реализацию таких функций, как cookies, управление состояниями и др.

TIdIcmpClient

Клиентский компонент, предназначенный для обеспечения протокола ICMP (Internet Control Message Protocol), с помощью которого осуществляется выполнение операции ping и трассировка сети.

ТШРОРЗ

Клиентский компонент, предназначенный для обеспечения протокола POP (Post Office Protocol), включая поддержку MIME-кодирования и декодирования, а также передачу многобайтных символов.

TIdIMAP4Server

Серверный компонент, предназначенный для поддержки операций по протоколу IMAP (Internet Message Access Protocol) на сервере. Протокол позволяет производить поиск сообщений электронной почты на сервере. Различие протоколов IMAP и РОР заключается в том, что протоколу РОР требуется дополнительная память для хранения данных, а протокол IMAP обращается к серверу вместо клиентской машины. IMAP4 создавался для замены POP3, однако до сих пор протокол POP3 остается широко используемым стандартом.

TIdIRCServer

Серверный компонент, предназначенный для поддержки наиболее часто используемых в Интернете сервисных операций, обычно называемых chat (для дружеских бесед). Компонент обеспечивает базовые конструктивные блоки для IRC (Internet Relay Chat) сервера.

IRC (англ. Internet Relay Chat — ретранслируемый интернет-чат) — сервисная система, при помощи которой можно общаться через сеть Интернет с другими людьми в режиме реального времени.

TIdMappedPortTCP

Серверный компонент, предназначенный для создания отображаемых портов, которые часто используются в proxy-серверах. Методы этого компонента позволяют отобразить один порт на другой. Например, порт 80 может быть отображен к порту 3000, и все запросы к первому порту (порт 80) будут переадресованы на второй порт (порт 3000).

TIdNNTP и TIdNNTPServer

Эти компоненты необходимы для обеспечения сетевого протокола NNTP (Network News Transfer Protocol), используемого в службах новостей. Клиентский компонент включает поддержку MIME-кодирования и декодирования, а также поддержку многобайтных символов и альтернативных кодировок. Серверный компонент позволяет создавать серверы новостей. Важно отметить, что TIdNNTPServer является не полнофункциональным сервером новостей, а компонентом, обеспечивающим базовые возможности для такого сервера.

TIdQOTD и TIdQOTDServer

Компоненты используются для обеспечения службы «цитат дня» (Quote of the Day). С помощью клиентского компонента осуществляется соединение с экземпляром серверного компонента для получения ежедневной цитаты. Каждый экземпляр сервера содержит уникальную базу данных цитат.

TIdSMTP

Клиентский компонент, предназначенный для применения в приложениях протокола SMTP (Simple Mail Transfer Protocol), обеспечения поддержки аутентификации, MIME-кодирования и декодирования, а также для поддержки многобайтных символов.

 

TIdSNTP

Клиентский компонент, предназначенный для обеспечения протокола SNTP (Simple Network Time Protocol) — службы времени. Может использоваться для соединения с любой службой времени с целью определения текущих даты и времени.

TIdSimpleServer

Серверный компонент, обеспечивающий облегченный ТСР-сервер. Позволяет организовывать соединение «точка-точка». Используется для создания серверов с единственным пользователем, то есть может единовременно обслуживать только одно подключение. В отличие от компонента TIdTCPServer не порождает вторичные процессы при ожидании запросов от клиентов и при обработке этих запросов. Другими словами, если сервер обслуживает запрос от какого-то клиента, а в это время к нему обращается для подключения другой клиент, то он будет блокирован до конца обработки первого запроса.

TIdTelnet и TIdTelnetServer

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

TIdTime и TIdTimeServer

Клиентский компонент является альтернативой компонента TIdSNTP для определения времени. Важно отметить, что форматы этих двух протоколов различны. TIdTime основан на формате RFC 868 (возвращает время во внутреннем стандарте ОС UNIX, выполняя все необходимые преобразования). Серверный компонент подобен по функционированию DayTime-серверу. Может использоваться для реализации службы времени на локальном компьютере. Дополнительного кода не требуется, достаточно создать экземпляр TIdTimeServer, который будет возвращать время внутренних часов серверного компьютера.

TIdTrivialFTP и TIdTrivialFTPServer

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

TIdTunnelMaster и TIdTunnelSlave

Серверные туннельные компоненты используются в proxy-серверах для организации множественных логических соединений поверх одного физического (туннеля). Эти классы можно применять для различных целей, например для организации секретного соединения по несекретным каналам.

TIdWhois и TIdWhoIsServer

Этот клиентский компонент осуществляет соединение с любым стандартным Whois-сервером, позволяющим получить информацию о доменах. Серверный компонент обеспечивает базовую функциональность NIC сервера.

 

Indy Misc

Страница палитры компонентов Indy Misc (Indy Miscellaneous Components) включает кодеки BASE64, UUE, Quoted Printable и другие распространенные форматы обмена данными через e-mail, кодеры (MD2, MD4 и MD5) для стандартов криптографии, используемые для хранения паролей и электронных подписей в необратимом (трудно поддающемся дешифрованию) виде, а также многие другие полезные компоненты и утилиты, часто применяемые при разработке Интернет-приложений (рис. 3).

TIdAntiFreeze

Вследствие блочной организации алгоритмов компонентов Indy зачастую создается впечатление, что приложение «зависло», в то время как соединение работает. Чтобы исключить использование вторичных процессов (threads) при организации коммуникаций для предотвращения замораживания (freeze) приложения, достаточно поместить на форму указанный компонент.

Компонент работает, анализируя запросы из стека протокола TCP/IP и посылая сообщения приложению во время задержки при возникновении блокировки внешних соединений, что создает иллюзию работающего кода. Поскольку воздействие компонента осуществляется на блокированные соединения только для главного процесса, использование TIdAntiFreeze во вторичных процессах приложения не требуется. Необходимо помнить, что компонент TIdAntiFreeze замедляет работу соединений, поскольку работа главного процесса периодически прерывается для обработки сообщений. Отсюда следует, что надо заботиться о том, чтобы разрабатываемое приложение не тратило слишком много времени на обработку сообщений, включая OnClick, OnPaint, OnResize и др. В какой-то степени этим можно управлять через свойства класса TIdAntiFreeze. Использование данного компонента не является обязательным, но позволяет решить проблему синхронизации соединений с визуальным интерфейсом приложения.

TIdDateTimeStamp

Класс для выполнения математических действий с датой и временем, связанных с тем, что Интернет-протоколы используют различные форматы даты и времени; кроме того, клиенты и серверы могут находиться в различных часовых поясах.

TIdIPWatch

Это компонент, основанный на таймере, который постоянно контролирует изменения в IP-адресе компьютера. События компонента возникают, когда выявлено изменение. Указанный компонент обычно используют для обнаружения факта появления связи компьютера с Интернетом или любой другой сетью. Изменение в IP-адресе в этой ситуации может произойти из-за назначения IP-адреса DHCP-сервером (Dynamic Host Configuration Protocol) при соединении с новой сетью.

TIdLogDebug

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

TIdMessage

Компонент используется в комбинации с другими компонентами, чтобы должным образом расшифровать или кодировать сообщения. Это могут быть POP-, SMTP- и NNTP-компоненты. Класс поддерживает MIME-шифрование и расшифровку, многобайтные символы и кодировку ISO.

TIdNetworkCalculator

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

TIdThreadMgrDefault

Компонент обеспечивает управление вторичными процессами по умолчанию. Создается в случае, если для какого-либо компонента Indy, поддерживающего управление процессами, не определен экземпляр класса TIdThreadManager. Компонент обеспечивает только основные возможности управления вторичными процессами: создает и уничтожает их по требованию.

TIdThreadMgrPool

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

TIdVCard

VСard — электронный эквивалент визитной карточки, может содержать персональную информацию владельца, графические данные.

TIdIMFDecoder

Предназначен для декодирования Интернет-сообщений. Является наследником класса TIdCoder, так же как и все остальные компоненты-кодировщики. Класс TIdCoder осуществляет декодирование в соответствии со стандартом формата текстовых Интернет-сообщений ARPA RFS-822, предложенным в августе 1982 года, и стандартом для обмена USENET-сообщениями RFC 1036, предложенным в декабре 1987 года.

Компонент расширяет возможности класса TIdCoder, позволяя обнаруживать формат RFS-822 по контексту заголовков, обеспечивая режим расшифровки при приеме и MIME-шифрование и расшифровку. Компонент TIdIMFDecoder используется в классе TIdMessageClient для декодирования получаемых и передаваемых сообщений.

TIdQuotedPrintableEncoder

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

TIdBase64Encoder

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

TIdUUEncoder

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

TIdXXEncoder

Этот метод шифрования едва ли когда-либо будет использоваться. По сути, это то же самое UU-кодирование, но с другой таблицей шифрования.

 

TIdCoderMD2

Компоненты с различными разновидностями алгоритма шифрования MD (Message Digest). Все они основаны на перемешивании, являются односторонними и не имеют алгоритмов расшифровывания .

Компоненты протокольных клиентов и серверов могут быть использованы для разработки серверных и клиентских Интернет-приложений, совместно или взамен базовых (ClientSocket, ServerSocket) и других компонентов из состава палитры Internet и Fastnet. Компоненты Indy не используют архитектуру WebBroker, реализуя поддержку Интернет-протоколов и служб на нижнем уровне непосредственно в своем исходном коде (исходные коды прилагаются).

TIdConnectionInterceptOpenSSL и TIdServerInterceptOpenSSL

Протокол SSLSecure Sockets Layer (Секретный Уровень Сокетов), обеспечивающий секретность и надежность связи между двумя приложениями, имеет два уровня. На низком уровне многоуровневого транспортного протокола (например, TCP) SSL является протоколом записи и используется для инкапсуляции различных протоколов более высокого уровня. Преимущество SSL состоит в том, что он является независимым протоколом прикладной программы, при этом протокол более высокого уровня может быть использован поверх SSL.

SSL осуществляет защиту связи, которая имеет три основные функции: обеспечение конфиденциального соединения; шифрование с открытым ключом (используется для подтверждения подлинности адресата); поддержка надежности передачи данных.

          Симметричная криптография используется для шифрования данных (например, DES, RC4
и т.д.).

          Цифровая подпись обеспечивается при помощи асимметричного шифрования с открытым
ключом (например,
RSA, DSS и т.п.).

          Надежность   связи,   транспортировка   сообщения   включает   проверку   целостности
сообщения посредством корректирующих кодов MAC, безопасных хеш-функций (например,
SHA, MD5, и т.д.) с использованием MAC-вычислений.

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

Компоненты TIdConnectionInterceptOpenSSL и TIdServerInterceptOpenSSL обеспечивают соединение как со стороны клиента, так и со стороны сервера в соответствии с протоколом SSL. Необходимо отметить, что компоненты TIdConnectionInterceptOpenSSL и TIdServerInterceptOpenSSL есть только в Delphi 6, а в Kylix отсутствуют. Это связано со сложностью протокола, который в случае реализации Windows основан на функциях операционной системы.

В компонентах Indy реализована почти вся функциональность, имеющаяся в компонентах Internet и Fastnet, что наглядно показано в таблице.

 

Компоненты Fastnet

Компоненты Indy

Назначение компонентов

TserverSocket, TClientSocket

TIdTCPserverSocket, TIdTCPClientSocket

Взаимодействие двух компьютеров (клиента и сервера) с помощью протокола TCP/IP

TNMDayTime

TIdDayTime, TIdDayTimeServer

Запрос сервера о текущем времени

TNMEcho

TIdEcho, TIdEchoServer

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

TNMFinger

TIdFinger, TIdFingerServer

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

TNMFTP

TIdFTP, TIdTrivialFTP, TIdTrivialFTPServer

Обеспечивают передачу файлов с помощью протокола FTP

TNMHTTP

TIdHTTP, TIdHTTPServer

Используют протокол HTTP для обмена данными

TNMMsgServ, TNMMsg

 

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

TNMNNTP

TIdNNTP, TIdNNTPServer

Поддерживают обмен данными с сервером новостей

TNMPOP3

TIdPOP3

Используются для получения электронной почты с почтового сервера с помощью протокола POP3

TNMSMTP

TIdSMTP

Используются для отправки электронной почты через почтовый сервер Интернет

TNMStrm, TNMStrmServ

 

Передают двоичные данные, записанные в поток, с помощью протокола TCP/IP

TNMUDP

TIdUDP, TIdUDPServer

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

TpowerSock, TNMGeneralServer

 

Инкапсулированные в виде компонентов классы, которые являются базовыми для написания собственных клиентов (Powersock) и серверов (NMGeneralServer)

TNMUUProcessor

TIdUUEncoder, TIdUUDecoder

Осуществляют перекодировку двоичных файлов в формат MIME или UUENCODE

TNMURL

 

Перекодирует строки в формат HTML и осуществляет обратную перекодировку

Исключение составляют такие классы, как TNMMsgServ, TNMMsg, TNMStrm, TNMStrmServ, TpowerSock, TNMGeneralServer, TNMURL, которые либо реализуют морально устаревшие протоколы, либо обладают функциональностью, реализованной в большой группе альтернативных классов.

Однако в отличие от своих предшественников — компонентов Internet и Fastnet, в Indy богаче представлены серверные компоненты и компоненты перекодирования и шифрования данных, а также поддержка аутентификации (палитра Indy Misc). Как видно из приведенной выше таблицы, основные протоколы и службы обеспечиваются не только клиентскими, но и серверными компонентами. Это службы времени, отклика, получения информации о пользователе, а также протоколы HTTP, NNTP, UDP и даже простейший вариант FTP.

Hosted by uCoz