369422d8

Как работает 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)
Реализация
Пример протокола

Базовый пример
Создание обработчика команд
Поддержка обработчика команд
Свойство 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)