Глубины Indy

         

Глубины Indy

От переводчика
Введение

Об этой книге
Обратная связь
Обновления
Примеры
Другие ресурсы
Для дальнейшего чтения
Благодарности
Примечание
Бесплатная поддержка
Платная, приоритетная поддержка



Отчеты об ошибках
Winsock
Обзор
Стек протоколов TCP/IP
Клиент
Сервер
IP адрес
Порт
Протокол
Сокет

Имя узла
Сервис DNS
Протокол TCP
Протокол UDP
Протокол ICMP
Файл HOSTS
Файл SERVICES
Localhost (Loopback)
Программа Ping
Программа TraceRoute

LAN
WAN
IETF
RFC
Кодовые потоки (thread)
Fork
Стек протоколов
Сетевой порядок байт
Путь Indy

Методология Indy
Различия Indy
Обзор клиентов
Обзор серверов
Потоки
Модели программирования
Другие модели
Блокирующий режим
Неблокирующий режим
История Winsock

Блокирующий режим это не смертельно
Достоинства блокирующего режима
Недостатки блокирующего режима
Достоинства неблокирующего режима
Недостатки неблокирующего режима
Сравнение технологий
Файлы против сокетов
Сценарий записи в файл
Блокирующий режим записи файла

Неблокирующий режим записи файла
Сравнение записи файлов
Почти как файлы
Базовый клиент
Обработка исключений
Исключения это не ошибки
Компонент TIdAntiFreeze
Пример - Проверка почтового индекса - клиент
Проверка почтового индекса - протокол
Объяснение кода

Надежность
Широкополосносные сообщения (Broadcast)
Размеры пакетов
Схема с подтверждениями
Схема с последовательностями
Компонент TIdUDPClient
Компонент TIdUDPServer

IP Address
Поле Message
Use a Custom Message
Show Any Key
Show Trademark
Клавиша Show
Клавиша Clear
Установка
Исходный код
Клиент RBSOD

Чтение и запись
Функция AllData
Процедура Capture
Функция CurrentReadBuffer
Свойство InputBuffer
Функция InputLn
Процедура ReadBuffer
Функция ReadCardinal
Функция ReadFromStack
Функция ReadInteger

Функция ReadLn
Функция ReadLnWait
Функция ReadSmallInt
Процедура ReadStream
Функция ReadString
Процедура ReadStrings
Функция WaitFor
Таймауты чтения
Функция SendCmd
Процедура Write

Процедура WriteBuffer
Процедура WriteCardinal
Процедура WriteHeader
Процедура WriteInteger
Процедура WriteLn
Процедура WriteRFCReply
Процедура WriteRFCStrings
Процедура WriteSmallInt
Процедура WriteStream
Процедура WriteStrings

Функция WriteFile
Буферизация записи
Работа транзакций
События OnWork
Управление своими собственными рабочими транзакциями
Обнаружение разъединения
Скажем прощай
А нужно ли вам реально знать это?
Я должен знать это немедленно!
Keep Alives

Пинги (Pings)
Исключение EIdConnClosedGracefully
Почему случаются исключения на серверах?
Почему это исключение?
Это ошибка?
А когда это ошибка?
Простое решение
Реализация протоколов
Терминология протокола
Простой текст (plain text)

Команды (commands)
Ответы (reply)
Отклики (response)
Переговоры (conversations)
RFC - определения
RFC - коды состояния
RFC – отклик (response)
RFC - транзакции
Класс TIdRFCReply

Класс ReplyTexts
Курица или яйцо?
Определение пользовательского протокола
Симуляция другой стороны (Peer Simulation)
Протокол получения почтового кода
Команда Help
Команда Lookup
Команда Quit

Глубины Indy

Прокси (proxy – заместитель, уполномоченный)
Прозрачные прокси
Туннелирование IP / Трансляция сетевого адреса (NAT)

Маппирование портов / Туннели
FTP User@Site прокси
Непрозрачные прокси
SOCKS прокси
HTTP (CERN) прокси
Обработчики ввода/вывода (IOHandlers)
Компонент TIdIOHandlerSocket
Компонент TIdIOHandlerStream
Компонент TIdSSLIOHandlerSocket
Пример - Speed Debugger

Пользовательский обработчик IOHandler
Перехватчики (Intercepts)
Перехватчики
Ведение логов (Logging)
Отладка
Ведение логов
Симуляция
Запись и воспроизведение
Параллельное выполнение (Concurrency)
Параллельное выполнение

Борьба (споры) за ресурсы (Contention)
Защита ресурсов (Resource Protection)
Разрешение споров (Resolving Contention)
Только чтение (Read Only)
Атомарные операции (Atomic Operations)
Поддержка Операционной Системы (Operating System Support)
Явная защита (Explicit Protection)
Критические секции (Critical Sections)
Класс TMultiReadExclusiveWriteSynchronizer (TMREWS)
Специальное примечание к классу TMREWS

Примечание к классу TMREWS в Kylix
Выбор между Critical Sections и TMREWS
Сравнение производительности
Мьютексы (Mutexes)
Семафоры (Semaphores)
События (Events)
Потоко-безопасные классы
Изоляция (Compartmentalization)
Кодовые потоки
Что такое поток?

Достоинства потоков
Управление приоритетами (Prioritization)
Инкапсуляция
Безопасность
Несколько процессоров
Не нужна последовательность
Процессы против потоков
Потоки против процессов
Переменные потоков
Термины потоковый (threadable) и потоко-безопасный (threadsafe)

Термин потоковый (threadable)
Термин потоко-безопасный (threadsafe)
Синхронизация
Класс TThread
Компонент TThreadList
Indy
Компонент TIdThread
Класс TIdThreadComponent
Метод TIdSync
Класс TIdNotify

Класс TIdThreadSafe
Общие проблемы
Узкие места
Реализация критических секций
Класс TMREWS
Синхронизация (Synchronizations)
Обновление пользовательского интерфейса
Серверы
Класс TIdTCPServer
Роль потоков

Сотни потоков
Реальные ограничения на потоки
Модели серверов
Командные обработчики
Класс TIdUDPServer
Класс TIdSimpleServer
События потоков
Модели TCP серверов
Событие OnExecute
Обработчики команд (Command Handlers)

Обработчики команд (Command Handlers)
Реализация
Пример протокола
Базовый пример
Создание обработчика команд
Поддержка обработчика команд
Свойство Greeting (приветствие)
Свойство ReplyExceptionCode
Свойство ReplyUnknownCommand
Прочие свойства

Тестирование новой команды
Реализация HELP
Реализация DATETIME
Заключение
Postal Code Server – командные обработчики
Управление потоками
Класс TIdThreadMgrDefault
Пул потоков (Thread Pooling)
SSL – безопасные сокеты
Безопасные протоколы HTTP и HTTPS

Другие клиенты
Сервер SSL
Преобразование сертификатов в формат PEM
Экспортирование сертификата
Преобразование файла .pfx в .pem
Разделение файла .pem
Файл Key.pem
Файл Cert.pem
Файл Root.pem
Indy 0 обзор

Разделение пакетов
Ядро SSL
Протоколы SSL
Клиент FTP
Сервер FTP
Разбор списка файлов FTP
Прочие
Перестройка ядра
Переработка обработчиков ввода/вывода (IOHandler)
Сетевые интерфейсы

Волокна (Fibers)
Планировщики (Schedulers)
Рабочие очереди
Цепочки (судя по всему внутренняя абстракция)
Драйверы цепочек (chain engines)
Контексты (Contexts)
Дополнительные материалы
Преобразование Delphi приложений в Delphi .Net
Термины
CIL

CLR
CTS
CLS
Управляемый код (Managed Code)
Неуправляемый код (Unmanaged Code)
Сборка (Assembly)
Компиляторы и среды (IDE)
Компилятор DCCIL (Diesel)
Beta
Версия Delphi 8

Проект SideWinder
Проект Galileo
Среда .Net Framework
Среда WinForms
Библиотека времени исполнения RTL
Библиотека CLX
Среда VCL for .Net
Что выбрать WinForms или VCL for .Net?
Дополнения по переносу
Маппирование типов в CTS

Пространство имен (Namespaces)
Вложенные типы (Nested Types)
Пользовательские атрибуты (Custom Attributes)
Другие дополнения к языку
Ограничения
Не безопасные элементы
Небезопасные типы

Глубины Indy

Небезопасный код
Небезопасные приведения (Casts)
Откидываемая функциональность (Deprecated Functionality)
Изменения

Разрушение (Destruction)
Явное разрушение. (Deterministic Destruction)
Не явное разрушение
Сборка мусора (Garbage Collection)
Шаги по переносу
Удаление предупреждений (Unsafe Warnings)
Модули и пространство имен
Преобразование DFM
Преобразование файла проекта
Разрешение с различиями в классах

Нужна удача
Chad Z. Hower a.k.a Kudzu
Hadi Hariri

Содержание раздела