Название: Подключение к Telnet серверу Отправлено: beginner от Январь 05, 2014, 17:01 Пытаюсь написать клиента для работы с телнет сервером, не получается получить от сервера строку "login"
Код: // ---------------------------------------------------------------------- Локальные переменные str "��%��\001��\003��'��\037��" QString this @0x28fe08 MyClient Название: Re: Подключение к Telnet серверу Отправлено: Bepec от Январь 05, 2014, 17:42 Очень просто - у вас проблема с кодировкой. Вам в ответ приходит UTF8, а вы пытаетесь видимо запихать его сразу в юникод.
Используйте QTextCodec. Документация в ассистенте есть. Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 05, 2014, 18:33 вот так пробую
Код: void MyClient::slotReadyRead() "��%��\001��\003��'��\037��" Код: QTextCodec *codec = QTextCodec::codecForName("CP1251"); "яэ%яы\001яы\003яэ'яэ\037яэ" Название: Re: Подключение к Telnet серверу Отправлено: Bepec от Январь 05, 2014, 19:21 Не buffer.data, а buffer.
PS ... Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 05, 2014, 19:34 Код: QTextCodec *codec = QTextCodec::codecForName("UTF-8"); Должна быть вот такая строка Welcome to Microsoft Telnet Service login: Название: Re: Подключение к Telnet серверу Отправлено: gil9red от Январь 05, 2014, 20:42 Может попробовать добавить QTextCodec::setCodecForСStrings(codec); ?
Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 05, 2014, 21:14 Может попробовать добавить QTextCodec::setCodecForСStrings(codec); ? Qt 5.2 QTextCodec::setCodecForСStrings - нет такого метода?Название: Re: Подключение к Telnet серверу Отправлено: LisandreL от Январь 06, 2014, 18:21 Код: QTextCodec *codec = QTextCodec::codecForName("UTF-8"); Должна быть вот такая строка Welcome to Microsoft Telnet Service login: Код: QTextCodec *codec = QTextCodec::codecForName("cp866"); Название: Re: Подключение к Telnet серверу Отправлено: Bepec от Январь 06, 2014, 19:01 �\001�� Это ж прямой utf. сначала комбинация, потом код символа. Хотя действительно интересно в чём он :)
PS сохраните массив с помощью QSettings и выкиньте сюда :D Я поковыряю тогда. Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 06, 2014, 19:13 Код: QTextCodec *codec = QTextCodec::codecForName("cp866"); " ¤% √\001 √\003 ¤' ¤\037 ¤\000 √\000" Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 09:30 �\001�� Это ж прямой utf. сначала комбинация, потом код символа. Хотя действительно интересно в чём он :) А не могли бы посмотреть в каком виде у вас телнет выдает?PS сохраните массив с помощью QSettings и выкиньте сюда :D Я поковыряю тогда. Название: Re: Подключение к Telnet серверу Отправлено: Mikhail от Январь 07, 2014, 11:15 Насколько я помню телнет протокол там идет обмен строками.
Попробуй с заменой в твоем первом посте: QString str; str = m_pTcpSocket->readLine(); m_ptxtInfo->append(str); Название: Re: Подключение к Telnet серверу Отправлено: xokc от Январь 07, 2014, 11:24 Что-то вы тут теплое с мягким путаете. Ни одна из приведенных тут строк не имеет никакого отношения ни к UTF-8, ни к UNICODE в частности. Строка "Welcome to Microsoft Telnet Service" во всех однобайтных кодировках (и в UTF-8, кстати, тоже) будет выглядеть именно как "Welcome to Microsoft Telnet Service".
Я бы вообще для начала посмотрел на содержимое QByteArray buffer = m_pTcpSocket->readAll(). Сразу всё ясно станет и, сдается мне, кодировки тут не причем. Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 11:53 В таком виде подойдет?
Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 11:58 Насколько я помню телнет протокол там идет обмен строками. Пробовал, те же каракули.Попробуй с заменой в твоем первом посте: QString str; str = m_pTcpSocket->readLine(); m_ptxtInfo->append(str); Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 12:41 Похоже, ошибка где-то в другом месте. Попробуйте подцепиться к smtp.yandex.ru:25 и посмотрите на ответ. Вот простейший пример, в котором всё работает как надо (Qt5.2.0).
Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 12:47 А вот и ответ Microsoft Telnet Server. По русски он может общаться. :D
Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 13:15 Не подключается, пинг проходит
Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 13:18 Хм... Вероятно, у провайдера 25-й порт закрыт. Тогда smtp.yandex.ru:587.
P.S. А я так и не понял, что там за кодировка... Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 13:23 Подключился и все нормально.
А вы с телнетом можете показать, плиз Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 13:29 А вы с телнетом можете показать, плиз Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 13:34 Мне по телнету надо проверять состояние потоков на системе передач, пробовал туда коннектится, получаю строку в таком же виде как и от своего сервера телнет, и что с этим делать ???
Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 13:39 Фу, блин!.. Разобрался. Wireshark forever! У M$ telnet-протокол какой-то нестандартный. Там нет передачи простых текстовых строк, он сразу пытается передать специальные данные, которые вообще не строки. Вероятно, telnet-клиент эту чертовщину понимает, а Вам её придётся расшифровывать.
Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 13:46 А вот я и неправ! Протокол-то стандартный. Это я его попутал с SMTP, который полностью текстовый. Wiki утверждает, что он изначально не текстовый http://ru.wikipedia.org/wiki/Telnet (http://ru.wikipedia.org/wiki/Telnet).
Название: Re: Подключение к Telnet серверу Отправлено: beginner от Январь 07, 2014, 13:47 Есть уже готовый класс для работы с телнет QtTelnet, только вот он у меня при компиляции ошибки выдает, я так понимаю из-за старой версии QT, может есть у кого рабочий вариант под QT5.2
Вот тут http://qt-project.org/forums/viewthread/18711 (http://qt-project.org/forums/viewthread/18711)коллега заходит тоже по телнету, без дополнительных преобразований, почему у меня не выходит Код: void cisco2948::slotReadyRead() Название: Re: Подключение к Telnet серверу Отправлено: Serr500 от Январь 07, 2014, 17:07 почему у меня не выходит Видимо, у цисок другой вариант протокола... |