Переходы между состояниями
С началом выполнения клиент переводит свой конечный автомат в состояние, отмеченное как TSDATA. Состояние TSDATA соответствует той ситуации, когда клиент ожидает поступления обычных символов данных и передачи их на экран терминала пользователя (т.е. клиент еще не приступил к чтению управляющей последовательности). Например, при поступлении символа q клиент остается в состоянии TSDATA и выполняет действие с меткой К (т.е. клиент вызывает процедуру ttputc для отображения символа на экране терминала пользователя, а затем проходит по циклу снова в то же состояние). Данные! Черногория отдых - статьи.
При поступлении символа TCIAC во время нахождения конечного автомата в состоянии TSDATA клиент следует по переходу в состояние TSIAC и выполняет действие, обозначенное меткой Е на данной схеме. В перечне условных обозначений к схеме указано, что действие Е соответствует пустой операции (по_ор). После перехода в состояние TSIAC клиент начинает интерпретировать управляющую последовательность. Если символ, следующий за символом TCIAC, представляет собой глагол (например, TCD0), клиент следует по переходу в одно из состояний обработки опции.
Конечный автомат для протокола TELNET должен иметь только шесть состояний, поскольку интерпретация протокола зависит лишь от краткой предыстории поступления символов. Например, вслед за символом TCIAC сервер может послать один из запросов на установку опций или ответов на запросы (TCDO, TCDONT, TCWILL или TCW0NT) или отправить запрос на уточнение опции. Уточнение опции позволяет отправителю включить в опцию строку переменной длины (например, опция, применяемая клиентом для передачи на сервер строки с обозначением типа терминала, требует уточнения, чтобы в нее можно было включить строку, содержащую имя терминала). Хотя уточнение позволяет передавать управляющие последовательности переменной длины, в конечном автомате достаточно иметь для их обработки только два состояния, поскольку строка уточнения оканчивается двухсим-вольной последовательностью. Клиент сразу после обнаружения запроса на уточнение переходит в состояние TSSUBNEG. Он входит в состояние TSSUBIAC при получении символа TCIAC и полностью выходит из состояния уточнения, если за ним непосредственно следует символ TCSE. При появлении любой другой двухсимвольной последовательности конечный автомат остается в состоянии TSSUBNEG.
Реализация конечного автомата
Поскольку существует возможность построить эффективную реализацию конечного автомата и в связи с тем, что такие конечные автоматы позволяют легко описывать протоколы с символьной организацией, в нашем примере кода используется три отдельных конечных автомата. Один из них управляет тем, как отвечает клиент на символы, введенные с клавиатуры, другой управляет обработкой клиентом символов, поступающих от сервера через соединение TCP, а третий выполняет все действия, связанные с уточнением опций. Во всех трех конечных автоматах используются структуры данных одинакового типа, что позволяет совместно применять некоторые процедуры, выполняющие манипуляции со структурами данных.

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