Части «мусора», которые вы видите, являются частью протокола Telnet.Пульт дистанционного управления пытается согласовать некоторые параметры с вами, а также может посылать вам некоторые другие команды (хотя на практике это относительно редко).См. TELNET COMMAND STRUCTURE
раздел применимого RFC для точного формата и значения всех возможных команд.
В большинстве случаев вы сможете просто игнорировать любые команды Telnet (включаясогласование параметров) получено, но вам нужно их отфильтровать: как вы обнаружили, простая обработка сеанса Telnet как чистого потока TCP не будет работать.
В дополнение к параметрам уровня протокола удаленный может такжеПредположим, что вы терминал, и отправьте escape-последовательности, чтобы убедиться, что данные отображаются правильно.Интерпретация или фильтрация этих кодов будет зависеть от типа терминала, который настроен для использования пульта дистанционного управления - весьма вероятно, что вы встретите, например, VT100 .
Нет реальной необходимостиКстати, слишком глубоко вникать в спецификации: вполне возможно использовать что-то заранее созданное, как эта минималистичная библиотека Telnet , чтобы разобраться с самыми важными для вас деталями.РЕДАКТИРОВАТЬ, 29 марта 2012 г .: Дополнительные примеры «мусора», которые вы видите, подтверждают, что пульт ДУ относится к вам как к VT100.Например: [0;1;4mTitle of Page Here
соответствует Set Attribute Mode: <ESC>[{attr1};...;{attrn}m
и пытается сделать заголовок страницы ярким (1) и подчеркнутым (4).
Самый простой вариант: как только вы увидите символ ESCape (ASCII 27), игнорируйте все после этого, вплоть до первого символа, которого нет в списке [;0123456789
.Это лишит наиболее распространенных кодов VT100: есть несколько, которые могут требовать специальной обработки, но они редки, и в любом случае, у вас есть спецификации сейчас.
Но даже если вы удалите контрольные коды, вы можетепо-прежнему получается поток данных, которые не разбираются, особенно если хост пытается сохранить причудливый макет экрана.Например, он может случайно обновить поле состояния (например, часы) в середине потока значений, которые вас интересуют. В этом случае вам понадобится (виртуальный) скребок экрана приложения эмулятора VT100.Такие решения в основном связаны с дорогим коммерческим программным обеспечением, хотя libvt100 - чисто .net / C # библиотека для анализа потока VT100 / ANSI может работать для вас.