Модель процессов для клиента TELNET
Для обеспечения параллельной передачи данных клиентская программа должна либо предусматривать использование нескольких потоков управления, работающих одновременно, либо обеспечивать параллельный ввод/вывод в рамках одного потока. В приведенном здесь примере кода реализован последний вариант: в клиентской программе используется один поток, который блокируется до тех пор, пока один из двух источников не будет готов к вводу/выводу. Выбранная авторами структура процессов показана на рис. 26.2. В одном потоке выполнения осуществляется чтение символов с клавиатуры пользователя и передача их в удаленную службу через соединение TCP. В этом же потоке происходит чтение символов из удаленной службы и передача их на экран монитора пользователя. Выделенный сервер. Предоставление на одном аккаунте доступа к обслуживанию платного хостинга сайтов.

Алгоритм клиента TELNET
Алгоритм 26.1 определяет принцип функционирования однопотокового клиента TELNET. Как и в проекте однопотокового параллельного сервера, описанного в главе 13, в реализации однопотокового параллельного клиента в системе Linux для осуществления этапа 3 алгоритма 26.1 используется системная функция select. Параметры вызова в клиентской программе функции select определяют, что поток должен быть заблокирован до тех пор, пока не поступят входные данные в дескриптор файла, соответствующий клавиатуре пользователя, или в дескриптор сокета, соответствующий соединению TCP. После перехода в состояние готовности любого из дескрипторов происходит возврат управления функцией select и клиентская программа выполняет чтение из дескриптора, готового к вводу. Единственный поток выполнения передает символы в обоих направлениях; он блокируется до тех пор, пока не появятся данные, доступные для ввода с клавиатуры или из сокета.
Алгоритм 26.1. Клиент TELNET
- Интерпретировать параметры и инициализировать структуры данных.
- Открыть соединение TCP с указанным портом на указанном удаленном хосте.
- Заблокироваться до тех пор, пока пользователь не введет символы с клавиатуры или не поступят данные из соединения TCP.
- При поступлении данных, введенных с клавиатуры, прочитать их, обработать, преобразовать в представление NVT и передать через соединение TCP. В противном случае — прочитать данные из соединения TCP, обработать, преобразовать в локальное символьное представление и передать их на дисплей терминала пользователя.
- Перейти к описанному выше этапу 3.