Russian Qt Forum
Ноябрь 23, 2024, 08:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Подключение к Telnet серверу  (Прочитано 13258 раз)
beginner
Гость
« : Январь 05, 2014, 17:01 »

Пытаюсь написать клиента для работы с телнет сервером, не получается получить от сервера строку "login"
Код:
// ----------------------------------------------------------------------
void MyClient::slotReadyRead()
{
    m_ptxtInfo->append("Received the ReadyRead() signal");
    buffer.clear();
    buffer.append(m_pTcpSocket->readAll());
    QString str;
    str = buffer.data();
    m_ptxtInfo->append(str);
    qDebug() << "slotReadyRead";
}

// -------------------------------------------------------
получаю непонятный мне набор символов 
   Локальные переменные      
      str   "��%��\001��\003��'��\037��"   QString
      this   @0x28fe08   MyClient
   
Записан
Bepec
Гость
« Ответ #1 : Январь 05, 2014, 17:42 »

Очень просто - у вас проблема с кодировкой.  Вам в ответ приходит UTF8, а вы пытаетесь видимо запихать его сразу в юникод.

Используйте QTextCodec. Документация в ассистенте есть.

Записан
beginner
Гость
« Ответ #2 : Январь 05, 2014, 18:33 »

вот так пробую
Код:
void MyClient::slotReadyRead()
{
    m_ptxtInfo->append("Received the ReadyRead() signal");
    buffer.clear();
    buffer.append(m_pTcpSocket->readAll());
    QString str;
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    str = codec->toUnicode(buffer.data());
   // str = buffer.data();
    m_ptxtInfo->append(str);
    qDebug() << "slotReadyRead";
}
получаю
"��%��\001��\003��'��\037��"
Код:
QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForLocale(codec);
    str = codec->toUnicode(buffer.data());

"яэ%яы\001яы\003яэ'яэ\037яэ"
« Последнее редактирование: Январь 05, 2014, 18:47 от beginner » Записан
Bepec
Гость
« Ответ #3 : Январь 05, 2014, 19:21 »

Не buffer.data, а buffer.

PS ...
Записан
beginner
Гость
« Ответ #4 : Январь 05, 2014, 19:34 »

Код:
 QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    str = codec->toUnicode(buffer);
"��%��\001��\003��'��\037��\000��\000"

Должна быть вот такая строка

Welcome to Microsoft Telnet Service

login:
« Последнее редактирование: Январь 05, 2014, 19:52 от beginner » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Январь 05, 2014, 20:42 »

Может попробовать добавить QTextCodec::setCodecForСStrings(codec); ?
Записан

beginner
Гость
« Ответ #6 : Январь 05, 2014, 21:14 »

Может попробовать добавить QTextCodec::setCodecForСStrings(codec); ?
Qt 5.2  QTextCodec::setCodecForСStrings - нет такого метода?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #7 : Январь 06, 2014, 18:21 »

Код:
 QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    str = codec->toUnicode(buffer);
"��%��\001��\003��'��\037��\000��\000"

Должна быть вот такая строка

Welcome to Microsoft Telnet Service

login:
Сильно сомневаюсь, что в Microsoft Telnet Service кодировка utf-8, скорее всего cp866 или cp1251.
Код:
 QTextCodec *codec = QTextCodec::codecForName("cp866");
    str = codec->toUnicode(buffer);
Записан
Bepec
Гость
« Ответ #8 : Январь 06, 2014, 19:01 »

�\001�� Это ж прямой utf. сначала комбинация, потом код символа. Хотя действительно интересно в чём он Улыбающийся

PS сохраните массив с помощью QSettings и выкиньте сюда Веселый Я поковыряю тогда.
Записан
beginner
Гость
« Ответ #9 : Январь 06, 2014, 19:13 »



Код:
 QTextCodec *codec = QTextCodec::codecForName("cp866");
    str = codec->toUnicode(buffer);

" ¤% √\001 √\003 ¤' ¤\037 ¤\000 √\000"
Записан
beginner
Гость
« Ответ #10 : Январь 07, 2014, 09:30 »

�\001�� Это ж прямой utf. сначала комбинация, потом код символа. Хотя действительно интересно в чём он Улыбающийся

PS сохраните массив с помощью QSettings и выкиньте сюда Веселый Я поковыряю тогда.
А не могли бы посмотреть в каком виде у вас телнет выдает?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #11 : Январь 07, 2014, 11:15 »

Насколько я помню телнет протокол там идет обмен строками.
Попробуй с заменой в твоем первом посте:

    QString str;

    str = m_pTcpSocket->readLine();
    m_ptxtInfo->append(str);
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #12 : Январь 07, 2014, 11:24 »

Что-то вы тут теплое с мягким путаете. Ни одна из приведенных тут строк не имеет никакого отношения ни к UTF-8, ни к UNICODE в частности. Строка "Welcome to Microsoft Telnet Service" во всех однобайтных кодировках (и в UTF-8, кстати, тоже) будет выглядеть именно как "Welcome to Microsoft Telnet Service".
Я бы вообще для начала посмотрел на содержимое QByteArray buffer = m_pTcpSocket->readAll(). Сразу всё ясно станет и, сдается мне, кодировки тут не причем.
Записан
beginner
Гость
« Ответ #13 : Январь 07, 2014, 11:53 »

В таком виде подойдет?
Записан
beginner
Гость
« Ответ #14 : Январь 07, 2014, 11:58 »

Насколько я помню телнет протокол там идет обмен строками.
Попробуй с заменой в твоем первом посте:

    QString str;

    str = m_pTcpSocket->readLine();
    m_ptxtInfo->append(str);
Пробовал, те же каракули.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.