Основная проблема с Telnet заключается в том, что он НЕ использует модель команда / ответ, как большинство других интернет-протоколов.Любая сторона может отправлять данные в любое время, и каждое направление данных не зависит от другого направления.Это отражено в TIdTelnet
тем фактом, что он запускает внутренний поток чтения для получения данных.Из-за этого вы не можете просто подключиться, отправить команду и ждать ответа в одном блоке кода, как вы можете с другими компонентами Indy.Вы должны написать команду, затем подождать, пока не сработает событие OnDataAvailable
, и затем проанализировать данные, чтобы определить, что это на самом деле (и быть готовым к обработке ситуаций, в которых могут быть получены частичные данные, поскольку именно так TCP /IP работает).
Если вы подключаетесь к серверу, который фактически реализует модель команд / ответов, то лучше использовать TIdTCPClient
напрямую вместо TIdTelnet
(а затем реализовать любое декодирование последовательности Telnet вручнуюесли сервер действительно использует Telnet, что в наши дни редко, но не невозможно).Для Indy 11 мы могли бы реорганизовать логику TIdTelnet
для поддержки не поточной версии, но это еще не решено.