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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отправка сообщения клиенту  (Прочитано 6012 раз)
gurenko
Гость
« : Июнь 23, 2016, 15:20 »

Добрый день

Использую следующую функцию для отправки сообщений клиенту
Код:
void MyServer::sendToClient(QTcpSocket* pSocket, const QString& str)
{
    QByteArray  arrBlock;
    QTextStream Qcout(stdout);
    //Qcout<<str.size();
    //QTextStream out(&arrBlock,QIODevice::WriteOnly);
    QDataStream out(&arrBlock, QIODevice::WriteOnly);

    out.setVersion(QDataStream::Qt_4_4);
    out << (quint16)0 << str;

    out.device()->seek(0);
    out << quint16(arrBlock.size() - sizeof(quint16));

    //Qcout<<quint16(arrBlock.size() - sizeof(quint16));
    pSocket->write(arrBlock);
}

Сообщения отправляются, но проблема в том, что клиент получает сообщения, в котором все символы идут через точку. Например, 0,CONNECTOK+IPD,0,59::...6.S.e.r.v.e.r..R.e.s.p.o.n.s.e.:..C.o.n.n.e.c.t.e.d.!
Т.к. обрабатывать это сообщение нужно на микроконтроллере, то это очень нежелательный  эффект.
1. Из-за чего это получается и как это устранить?
2. Почему-то длинна принятого сообщения всегда больше длины отправленного ,т.е. отправлял сообщение длинной 57(для этого примера)
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 23, 2016, 15:28 »

Похоже, что в сообщениях символы двухбайтовые, а у клиента как однобайтовые показываете
Записан

gurenko
Гость
« Ответ #2 : Июнь 23, 2016, 15:33 »

Да я проверял, т.е. строка имеет нормальный размер, когда засовываешь в QByteArray размер удваивается, а как с этим справиться?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июнь 23, 2016, 15:34 »

Ну, посмотрите что приходит и что уходит в HEX'е, если сомневаетесь Улыбающийся
Записан

gurenko
Гость
« Ответ #4 : Июнь 23, 2016, 15:36 »

В Вас то я не сомневаюсь, я имею ввиду как победить эту ситуацию?)
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июнь 23, 2016, 15:43 »

В Вас то я не сомневаюсь, я имею ввиду как победить эту ситуацию?)

Знать бы в какой кодировке отображается на клиенте?
Записан

gurenko
Гость
« Ответ #6 : Июнь 23, 2016, 16:31 »

Тут сложно сказать, я же посылаю на вай фпй модуль, он передает на МК, а я потом по компорту смотрю, что получил МК.
Когда отправлял строку с вот этой проги hercules_3-2-8, предварительно создав на ней сервер, все было норм, поэтому мне кажется, что проблема может быть в qt
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #7 : Июнь 23, 2016, 16:40 »

Да я проверял, т.е. строка имеет нормальный размер, когда засовываешь в QByteArray размер удваивается, а как с этим справиться?
str.toLatin1() или str.toLocal8Bit()
Записан
Tamori Nao
Гость
« Ответ #8 : Июнь 23, 2016, 16:42 »

Переведи QString к пимеру toLocal8Bit и отправь на сокет. Если Qt 4.8 к примеру то попробуй перевести toAskii(). Посмотри что получилось. Так же перед отправкой в дебаге посмотри что отправляешь в хекс виде arrBlock.toHex()
Записан
gurenko
Гость
« Ответ #9 : Июнь 24, 2016, 10:29 »

str.toLocal8Bit() помогло. Спасибо всем большое!
Записан
gurenko
Гость
« Ответ #10 : Июль 01, 2016, 14:47 »

Отправкой вроде разобрался, но с получением опять какая-то жопа.
Что я делаю, пытаюсь соединить сервер на qt и клиент на микроконтроллере. Когда запускаю сервер на hercules_3-2-8, то все работает нормально. Теперь нужно запустить сервер на qt.

Для чистоты эксперимента, беру клиент на hercules_3-2-8 и коннекчусь к серверу на qt, кот взял из книги Макс Шлее. Коннект проход и сервер мне присылает даже сообщение.

А вот с приемом вообще никак. причем если взять клиента qt, то все работает, поэтому мне кажется что дело опять таки в кодировках.
Может кто чего подскажет , задача то простая, соединить сервер qt и hercules_3-2-8
Записан
gurenko
Гость
« Ответ #11 : Июль 01, 2016, 16:24 »

В топку все - перешел на QTextStream и все заработало)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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