Как обрабатывать входящие управляющие символы в пользовательском терминале?

Для моего проекта мне нужно было создать пользовательское окно, похожее на терминал, и подключиться к маршрутизатору Cisco через консольный порт. Поэтому я унаследовал TextBox и создал собственный элемент управления в WPF. И я подумал, что этого будет достаточно; просто добавить код для реализации дополнительных функций, которые я хотел. Я отправляю по одному символу и жду ответов. Но потом я увидел, что мой пользовательский терминал не обрабатывает специальные символы, такие основные, как \n, конечно, распознаются, а все остальные нет. Я написал ответы на текстовый файл, и я вижу, что у меня довольно много таких специальных ответов, но я не знаю, как мне реагировать. Может быть, кто-то знает или нашел какие-то ссылки с информацией о том, как реагировать на конкретный управляющий символ? Я нашел только то, какие символы отправляются здесь , но больше ничего об этом. Я понимаю, что для «BS» я удалю один символ перед кареткой, но что мне делать, когда я получаю «ACK» или «DC1»? Может, мне просто их пропустить? Любые идеи?


Изменить: помимо отправки одного символа за раз, я получу ответ только тогда, когда отправлю ввод или такие символы, как? или ТАБ. Затем, когда я получаю ответ, он смешивается со специальными символами для форматирования текста, как в окне терминала 80x25. И я хотел бы просто отображать его так, как он хочет, но это означает, что мне нужно знать, как реагировать, когда я получаю специальные символы, мне не нужно их отображать, просто форматировать обычный текст на основе специальных, которые я также получение. Когда я получаю BS, мне нужно очистить символ перед кареткой, когда я получаю DEL, мне нужно очистить символ после каретки. И я хотел бы знать, что мне нужно делать, когда я получаю другие специальные символы. Я знаю, что могу сделать это трудным путем и просто отправить их на работающий терминал и посмотреть, что он будет делать, но это займет некоторое время, поэтому мне интересно, знает ли кто-нибудь ответ.


person Falander    schedule 28.09.2011    source источник
comment
Когда я пишу вопрос таким образом, всегда найдется кто-нибудь, кто скажет, что абзацы — это хорошо, используйте их. Теперь никто не делает... Кроме того, что вы делаете с захваченными персонажами, просто показываете их или больше? Трудно помочь вам, не зная, для чего нужны символы.   -  person Gert Arnold    schedule 28.09.2011
comment
Я отредактировал свой вопрос, может быть, теперь более понятно, что мне нужно.   -  person Falander    schedule 29.09.2011
comment
Если я правильно понял, то вы отправляете каждый символ отдельно, не будет ли вам проще отправить текст при вводе (из последнего /n)? Затем вы можете отделить строку и просмотреть все ваши специальные символы.   -  person hyp    schedule 29.09.2011
comment
Что ж, мой первый подход состоял в том, чтобы отправлять до тех пор, пока не будет нажата клавиша ввода, но теперь мне нужно отправлять каждый символ за раз (это не мой выбор). Но осталась та же проблема, что кроме форм буквенно-цифровых символов у меня появились контрольные. Таким образом, нет большой разницы в отправке одной или всей команды до нажатия Enter.   -  person Falander    schedule 29.09.2011


Ответы (1)


Хорошо, я потрудился с терминалом, и теперь я знаю, что единственный специальный символ, который мне нужно обработать, это BS (конечно, я пробовал это только с маршрутизаторами Cisco, но мне просто нужно поработать над ними), единственная проблема в том, что вы нужно создать свой собственный код, чтобы заставить его работать, и переместить курсор в нужное место в зависимости от количества BS. И лучше создайте свою собственную переменную для хранения индекса вставки, потому что TextBox CaretIndex просто не хотел работать так, как я ожидал. Остальные спецсимволы, насколько мне известно, можно не указывать. И работает отлично, как я и хотел.

person Falander    schedule 04.10.2011