Глубины Indy. 2. Техническая поддержка
Скачать 1.03 Mb.
|
1 Indy in Depth - Глубины Indy http://www.delphifaq.ru/indy-in-depth---glubiny-indy/ Отличная книга, преведённая на русский язык Анатолием Подгорецким, даёт понимание принципов работы компонентов Indy, значительно упрощающих и ускоряющих процесс создания сетевых приложений в Delphi. 1. Введение 2. Техническая поддержка 3. Введение в сокеты 4. Введение в Indy 5. Блокирующий режим против неблокирующего 6. Введение в клиентов 7. UDP 8. Чтение и запись 9. Обнаружение разъединения 10. Реализация протоколов 11. Прокси 12. Обработчики ввода/вывода (IOHandlers) 13. Перехватчики (Intercepts) 14. Отладка 15. Параллельное выполнение (Concurrency) 16. Кодовые потоки 17. Серверы 18. SSL – безопасные сокеты 19. Indy 10 обзор 20. Дополнительные материалы 21. Об авторах Примеры 1. Введение Добро пожаловать в книгу «Погружение в Indy» Авторы: Чад Хувер (Chad Z. Hower a.k.a Kudzu) – Автор Indy и текущий координатор проекта Indy Хади Харири (Hadi Hariri) – помощник координатора проекта Indy Данный материал основан на материалах разработчиков и представлен на конференциях разработчиков из нескольких стран, а также материалов разработчиков в различных журналах. 1.1. Об этой книге Это предварительное издание. В работе еще находится множество материалов. Оно включает объединение, преобразование и импортирование из разных источников. В 2 дополнение, вы увидите несколько глав, с примечаниями, похожими на лепет. Поскольку мы еще пока работаем над материалом. Не волнуйтесь, если некоторые главы пока немного бессмысленны в данное время. Мы надеемся выпускать обновления раз в месяц в течение первых нескольких месяцев, по мере появления. Спасибо за вашу поддержку и терпение. 1.1.1. Обратная связь Пожалуйста, посылайте ваши замечания по данной книге на Indy@atozedsoftware.com. Не обращайтесь за технической поддержкой на данный адрес. Для технической поддержки смотрите главу 2. Техническая поддержка. 1.1.2. Обновления Обновления можно найти на сайте http://www.atozedsoftware.com/. 1.1.3. Примеры Все примеры, на которые есть ссылки в книге, доступны на сайте http://www.atozedsoftware.com. 1.2. Дополнительная информация 1.2.1. Другие ресурсы Главный Интернет сайт проекта - http://www.Indyproject.org/ Зеркала проекта - http://Indy.torry.NET/ Портал Indy – Подписка на новости, статьи, загрузка примеров. http://www.atozedsoftware.com/Indy/ Kudzu World - Chad Z. Hower уголок в Сети. http://www.hower.org/Kudzu/ 1.2.2. Для дальнейшего чтения Данные книги содержат статьи об Indy. Building Kylix Applications by Cary Jensen Mastering Delphi by Marco Cantu SDGN Magazine - SDGN Magazine, официальный журнал SDGN, в котором есть постоянная колонка - The Indy Pit Stop written by Chad Z. Hower a.k.a Kudzu. 1.3. Благодарности Большая благодарность следующим людям, группам и компаниями: Indy Pit Crew и Mercury Team за многие часы посвященными ими Indy. Что бы не забыть, многих людей, которые помогали нам с Indy, чьи имена были забыты. ECSoftware за разработку справки и руководство, за продукт Help and Manual, с помощью которого и был написан этот документ http://www.helpandmanual.com 3 2. Техническая поддержка 2.1. Примечание Пожалуйста, не посылайте письма напрямую членам Indy Pit Crew, если только они не попросят об этом специально. Обычно, когда члены Indy Pit Crew нуждаются в дополнительной информации или в ответ на письмо от члена Indy Pit Crew. Члены Indy Pit Crew проводят много времени в группах новостей, в тоже время, зарабатывая на жизнь, поэтому они не могут отвечать на технические вопросы через письма. Технические вопросы лучше задавать в соответствующей группе новостей. Если вам требуется приоритетное обслуживание ваших проблем, то воспользуйтесь платной поддержкой. Даже с платной поддержкой Indy полностью бесплатен, это просто дополнительная возможность. Если вы до сих пор не поняли, почему вы не должны посылать вопросы напрямую через почту, то посмотрите следующее: Indy делается в команде. Это означает, что только конкретные люди в состоянии ответственны за конкретные части кода. Посылая письмо, вы вероятнее всего посылаете его не тому человеку, который в состоянии ответить вам быстро. Email поступает только одному человеку и загружает только этого человека. Посылая сообщение в группу новостей, оно становится доступным, как всем членам Indy Pit Crew, так и другим пользователям Indy, каждый из которых может ответить вам. В дополнение вы можете получить различные ответы от разных людей, которые в состоянии ответить вам. Так же прочитайте статью How To Ask Questions The Smart Way. 2.2. Бесплатная поддержка Бесплатная поддержка может быть получена через группы новостей Borland. borland.public.delphi.internet.winsock borland.public.cppbuilder.internet.socket borland.public.kylix.internet.sockets Все группы новостей расположены на newsgroups.borland.com. Если у вас нет доступа до групп по NNTP, то вы можете читать их через web интерфейс на http://newsgroups.borland.com. Команда Indy просматривает эти группы регулярно и старается помочь. 2.3. Платная, приоритетная поддержка Open source software это фантастика, но часто очень плохая поддержка. Indy Experts Support решает данную проблему. Сервис Indy Experts Support обеспечивает вашу компанию приоритетной поддержкой через e-mail или телефон, при достаточно низкой стоимости. Сервис Indy Experts Support включает: Приоритетная поддержка по e-mail 4 Поддержка по телефону Прямой доступ до авторов и лидеров проекта Небольшие куски кода и небольшие проекты Приоритетное исправление ошибок и анализ кода Консультации через сервис Indy Consulting Более подробная информация об Indy Experts находится на странице http://www.atozedsoftware.com/Indy/support/. Сервис Indy Experts Support обслуживается наиболее грамотными экспертами Indy: Chad Z. Hower – Автор и лидер проекта Indy Hadi Hariri – Помощник лидера Doychin Bondzhev – Видный член команды Indy Core Team 2.4. SSL поддержка Intellicom обслуживает SSL поддержку форумов. 2.5. Отчеты об ошибках Все сообщения об ошибках должны посылаться через форму сообщения об ошибке на сайте Indy http://www.nevrona.com/Indy or http://Indy.torry.NET/ 2.6. Winsock 2 Indy 9.0 требует установленного Winsock 2.0, Windows 98, Windows NT и Windows 2000 имеют установленный Winsock 2.0 по умолчанию. При запуске Indy проверяет версию Winsock. Windows 95 единственная операционная система, которая не содержит Winsock 2.0. Но его можно установить, если загрузить обновление с сайта Microsoft. Адрес для загрузки следующий: http://www.microsoft.com/windows95/downloads/contents/wuadmintools/s_wunetworkingtools/ w95sockets2/ Патч требуется установить в любом случае, поскольку Winsock, который поставляется с Windows 95 имеет серьезные ошибки и утечки памяти, данный патч их устраняет. Windows 95 в данный момент уже редко распространен, менее 5% от общего количества от установленных систем. Еще меньшее количество из них подключено к Интернет, что не вызовет проблем при распространении ваших приложений. 3. Введение в сокеты 3.1. Обзор Данная глава является введением в концепцию сокетов (TCP/IP сокеты). Это не означает, что мы рассмотрим все аспекты сокетов; это только начальное обучение читателя, что бы можно было начать программировать. Есть несколько концепций, которые должны быть объяснены в первую очередь. При возможности, концепции будут подобны концепция телефонных систем. 5 3.2. Стек протоколов TCP/IP TCP/IP это сокращение от Transmission Control Protocol and Internet Protocol. TCP/IP может означать разные вещи. Очень часто в общем как слово «хватать все» (catch all). В большинстве других случаев, это относится к сетевому протоколу само по себе. 3.3. Клиент Клиент – это процесс, который инициализирует соединение. Обычно, клиенты общаются с одним сервером за раз. Если процессу требуется общаться с несколькими серверами, то создаются несколько клиентов. Подобно, телефонному вызову, клиент это та персона, которая делает вызов. 3.4. Сервер Сервер – это процесс, который отвечает на входящий запрос. Обычно сервер обслуживает некоторое количество запросов, от нескольких клиентов одновременно. Тем не менее, каждое соединение от сервера к клиенту является отдельным сокетом. Подобно, телефонному вызову, сервер это та персона, которая отвечает на звонок. Сервер обычно устроен так, что в состоянии отвечать на несколько телефонных звонков. Это подобно звонку в центр обслуживания, который может иметь сотен операторов и обслуживание передается первому свободному оператору. 3.5. IP адрес Каждый компьютер в TCP/IP сети имеет свой уникальный адрес. Некоторые компьютеры могут иметь более одного адреса. IP адрес - это 32-битный номер и обычно представляется с помощью точечной нотации, например 192.168.0.1. Каждая секция представляет собой одни байт 32-битного адреса. IP адрес подобен телефонному номеру. Тем не менее, точно так же, как и в жизни, вы можете иметь более одного телефонного номера, вы можете иметь и более одного IP адрес, назначенного вам. Машины, которые имеют более одного IP адреса, называются multi-homed. Для разговора с кем-то, в определенном месте, делается попытка соединения (делается набор номера). Ответная сторона, услышав звонок, отвечает на него. Часто IP адрес для сокращения называют просто IP. 3.6. Порт Порт – это целочисленный номер, который идентифицирует, с каким приложением или сервисом клиента будет соединение на обслуживание по данному IP адресу. Порт подобен расширению телефонного номера. Набрав телефонный номер, вы подсоединяетесь к клиенту, но в TCP/IP каждый клиент имеет расширение. Не существует расширений по умолчанию, как в случае с локальной телефонной станцией. В дополнении к IP адресу вы обязаны явно указать порт при соединении с сервером. 6 Когда серверное приложение готово воспринимать входящие запросы, то оно начинает прослушивать порт. Поэтому приложение или протокол используют общие заранее известные мировые порты. Когда клиент желает пообщаться с сервером, он обязан знать, где приложение (IP адрес/телефонный номер) и какой порт (расширение телефонного номера), приложение прослушивает (отвечает). Обычно приложения имеют фиксированный номер, чтобы не было проблем для приложения. Например, HTTP использует порт 80, а FTP использует порт 21. Поэтому достаточно знать адрес компьютера, чтобы просмотреть web страницу. Порты ниже 1024 резервированы и должны использовать только для реализации известных протоколов, которые используют подобный порт для его использования. Большинство популярных протоколов используют резервированные номера портов. 3.7. Протокол Слово протокол происходит от греческого слова protocollon. Это страница, которая приклеивалась к манускрипту, описывающая его содержимое. В терминах TCP/IP, протокол это описание как производить некоторые действия. НО в большинстве случаев это обычно одна из двух вещей: 1. Тип сокета. 2. Протокол более высокого командного уровня. Когда говорим о сокетах, то протокол описывает его тип. Распространенные типы сокетов следующие - TCP, UDP и ICMP Когда говорим о протоколах более высокого уровня, то это относится к командам и ответам, для реализации требуемых функций. Эти протоколы описаны в RFC. Примеры таких протоколов – это HTTP, FTP и SMTP. 3.8. Сокет Все что здесь говорится об сокетах, относится к TCP/IP. Сокет это комбинация IP адреса, порта и протокола. Сокет также виртуальный коммуникационный трубопровод между двумя процессами. Эти процессы могут быть локальными (расположенными на одном и том же компьютере) или удаленными. Сокет подобен телефонному соединению, которое обеспечивает разговор. Для того чтобы осуществить разговор, вы обязаны в первую очередь сделать вызов, получить ответ с другой стороны; другими словами нет соединения (сокета) - нет разговора. 3.9. Имя узла Имя узла это человеческий синоним, вместо IP адреса. Например, есть узел www.nevrona.com. Каждый узел имеет свой эквивалент в виде IP адреса. Для www.nevrona.com это 208.225.207.130. Использование имен узлов проще для человека, к тому же позволяет сменить IP адрес без проблем для потенциальных клиентов, без их потери. 7 Имя узла подобно имени человека или названию фирмы. Человек или фирма могут сменить свой телефонный номер, но вы сможете продолжать связываться с ними. От переводчика: видимо тут намекают на телефонный справочник, как аналог DNS. Иначе, о какой возможности можно говорить. 3.10. Сервис DNS DNS это сокращение от Domain Name Service. Задача DNS преобразовывать имена узлов в IP адреса. Для установки соединения, требуется IP адрес, DNS используется, чтобы сначала преобразовать имя в IP адрес. Что бы сделать телефонный звонок, вы должны набрать телефонный номер. Вы не можете для этого использовать его имя. Если вы не знаете номер человека или если он был изменен, то вы можете посмотреть его номер в телефонной книге. DNS является аналогом телефонной книги. 3.11. Протокол TCP TCP это сокращение от Transmission Control Protocol. Иногда TCP также называют потоковым протоколом. TCP/IP включает много протоколов и множество путей для коммуникации. Наиболее часто используемые транспорты это TCP и UDP. TCP это протокол, основанный на соединении, вы должны соединиться с сервером, прежде чем сможете передавать данные. TCP также гарантирует доставку и точность передачи данных. TCP также гарантирует, что данные будут приняты в том же порядке, как и переданы. Большинство вещей, которые используют TCP/IP - используют TCP как транспорт. TCP соединения, подобны телефонному звонку для разговора. 3.12. Протокол UDP UDP это сокращение от User Datagram Protocol. UDP предназначен для датаграмм, и он не требует соединения. UDP позволяет посылать облегченные пакеты на узел без установки соединения. Для UDP пакетов не гарантируется доставка и последовательность доставки. При передаче UDP пакетов, они отсылаются в блоке. Поэтому вы не должны превышать максимальный размер пакета, указанный в вашем TCP/IP стеке. Поэтому многие люди считают UDP малоприменим. Но это не так, многие потоковые протоколы, такие как RealAudio, используют UDP. Примечание: термин потоковый (streaming) может быть перепутан с термином потоковое соединение (stream connection), которое относится к TCP. Когда вы видите эти термины, вы должны определить, что именно имеется в виду. Надежность/достоверность UDP пакетов зависит надежности и перегрузки сети. UDP пакеты часто используются в локальных сетях (LAN), поскольку локальная сеть очень надежная и не перегруженная. UDP пакеты, проходящие через Интернет так же обычно 8 надежны и могут использовать коррекцию ошибок передачи или интерполяцию. Доставка не может быть гарантирована в любой сети – потом не будем считать, что ваши данные всегда достигнут точки назначения. Поскольку UDP не имеет средств подтверждения доставки, то вообще нет гарантии этой доставки. Если вы посылаете UDP пакет на другой узел, то вы не имеете возможности узнать, доставлен пакет или нет. Стек не может определить это и не выдает никакой информации об ошибке, если пакет не доставлен. Если вам требуется подобная гарантия, то вы должны сами организовать ответ от удаленного узла. UDP аналогичен посылке сообщения на обычный пейджер. Вы знаете, что вы послали, но вы не знаете получено ли оно. Пейджер может не существовать, или находиться вне зоны приема, или может быть выключен, или не работоспособен, в дополнение сеть может потерять ваше сообщение. Пока обратная сторона не сообщит о приеме сообщения, вы этого не узнаете. В дополнение, если вы посылаете несколько сообщений, то возможно они поступят совсем в другом порядке. Дополнительная информация по UDP находится в главе 7. 3.13. Протокол ICMP ICMP это сокращение от Internet Control Message Protocol. ICMP это протокол управления и обслуживания. Обычно, вам не потребуется использовать этот протокол. Обычно он используется для общения с маршрутизаторами и другим сетевым оборудованием. ICMP позволяет узлам получать статус и информацию об ошибке. ICMP используется для протоколов PING, TRACEROUTE и других подобных. 3.14. Файл HOSTS Файл HOSTS это текстовый файл, который содержит локальную информацию об узлах. Когда стек пытается определить IP адрес для узла, то он сначала просматривает этот файл. Если информация будет найдена, то используется она, если же нет, то процесс продолжается с использованием DNS. Это пример файла HOSTS: # This is a sample HOSTS file Caesar 192.168.0.4 # Server computer augustus 192.168.0.5 # Firewall computer Имя узла и IP адрес должны быть разделены с помощью пробела или табуляции. Комментарии также могут быть вставлены в файл, для этого должен быть использован символ #. Файл HOSTS может быть использован для ввода ложных значений или для замены значений DNS. Файл HOSTS часто используется в малых сетях, которые не имеют DNS сервера. Файл HOSTS также используется для перекрытия IP адресов при отладке. Вам не требуется читать этот файл, поскольку стек протоколов делает это самостоятельно и прозрачно для вас. 9 3.15. Файл SERVICES Файл SERVICES подобен файлу HOSTS. Вместо разрешения узлов в IP адреса, он разрешает имена сервисов в номера портов. Ниже пример, урезанный, файла SERVICES. Для полного списка сервисов вы можете обратиться к RFC 1700. RFC 1700 содержит определение сервисов и их портов: Echo 7/tcp Echo 7/udp Discard 9/tcp sink null Discard 9/udp sink null Systat 11/tcp users #Active users Systat 11/tcp users #Active users Daytime 13/tcp Daytime 13/udp Qotd 17/tcp quote #Quote of the day qotd 17/udp quote #Quote of the day chargen 19/tcp ttytst source #Character generator chargen 19/udp ttytst source #Character generator ftp-data 20/tcp #FTP data ftp 21/tcp #FTP control telnet 23/tcp smtp 25/tcp mail #Simple Mail Transfer Protocol Формат файла следующий: / [aliases...] [# Вам не требуется читать данный файл, поскольку стек протоколов делает это самостоятельно и прозрачно для вас. Файл SERVICES может быть прочитан с помощью специальной функции стека, но большинство программ не используют эту функции и игнорируют их значения. Например, многие FTP программы используют порт по умолчанию без обращения к функциям стека, для определения номера порта по имени ‘FTP’. Обычно вы никогда не должны изменять этот файл. Некоторые программы, тем не менее, добавляют свои значения в него и реально используют его. Вы можете изменить их значения, чтобы заставить использовать программу другой порт. Одна из таких программ – это Interbase. Interbase добавляет в файл следующую строку: gds_db 3050/tcp Вы можете изменить ее и Interbase будет использовать другой порт. Обычно это не слишком хорошая практика делать подобное. Но это может потребоваться, если вы пишите приложение с сокетами, обычно серверное приложение. Так же хорошей практикой при написании клиентов – это использование функций стека, для получения значений из файла SERVICES, особенно для нестандартных протоколов. Если вхождение не найдено, то можно использовать порт по умолчанию. 3.16. Localhost (Loopback) LOCALHOST подобен "Self" в Delphi или "this" в C++. LOCALHOST ссылается на компьютер, на котором выполняется приложение. Это адрес обратной петли и это реальный физический IP адрес, со значением 127.0.0.1. Если 127.0.0.1 используется на клиенте, он всегда возвращает пакет обратно на тот же компьютер, для сервера на том же компьютере, что и клиент. 10 Это очень полезно для отладки. Это также может быть использовано для связи с сервисами, запущенными на этом же компьютере. Если вы имеете локальный web сервер, то вам не надо знать его адрес и изменять свои скрипты, каждый раз как адрес будет изменен, вместо этого используйте 127.0.0.1. От переводчика: вообще то Localhost, может иметь и другой адрес, но как правило, это 127.0.0.1 3.17. Программа Ping Ping - это протокол, который проверяет доступен ли узел с локального компьютера, или нет. Ping обычно используется в диагностических целях. Ping работает из командной строки, синтаксис использования следующий: ping |