Russian Qt Forum

Qt => Работа с сетью => Тема начата: azedol от Ноябрь 03, 2010, 13:18



Название: Приём строки в Ascii по tcp
Отправлено: azedol от Ноябрь 03, 2010, 13:18
Программа написанная на билдере шлёт строку, как показал wireshark в ascii.
QString не хочет воспринимать её.
Так я с эмитировал, то что шлёт та программа:
Код
C++ (Qt)
QString o="same data";
out <<  o.toAscii();
может не совсем и так но очень похоже...

а вот так я принимал до этого:
Код
C++ (Qt)
in >>  ad;

Как правильно обработать входящую строку?


Название: Re: Приём строки в Ascii по tcp
Отправлено: Пантер от Ноябрь 03, 2010, 13:26
Кодировка какая? Читай про QTextCodec.


Название: Re: Приём строки в Ascii по tcp
Отправлено: merke от Ноябрь 03, 2010, 13:39
может быть принять всё сначала в QByteArray?


Название: Re: Приём строки в Ascii по tcp
Отправлено: azedol от Ноябрь 03, 2010, 15:40
спасибо за ответы :)

Кодировка какая? Читай про QTextCodec.
кодировка по сути не имеет значения, т.к.в строке цифры

попробую то что предложили

upd:  вроде   QTextCodec помог, по крайней мере с эмуляцией, вечером затесчу прогу

upd2:

при тесте с реальной программой ничего не получилось

вот данные из пакета, которые шлёт программа написанная на билдере:

Код:
0030                     31 20 30 20 31 20 31 20 31 20         1 0 1 1 1 
0040   31 20 30 2c 39 31 33 30 35 20 30 2c 39 31 33 30  1 0,91305 0,9130
0050   35 20 30 2c 39 31 33 30 35 0d 0a                 5 0,91305..

а тот который я эмулировал и нормально принимает вот:


Код:
0030                     00 00 00 23 31 20 31 20 31 20        ...#1 1 1 
0040   30 20 30 20 30 20 30 2c 35 31 31 31 31 20 30 2c  0 0 0 0,51111 0,
0050   39 39 35 35 35 20 30 2c 39 31 35 31 35           99555 0,91515

получается что моя программа принимает данные только если в начале идёт 4 байта "00 00 00 23"  hex

ну и код:
Код
C++ (Qt)
QByteArray encodedString ;
in>>encodedString;
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString  str = codec->toUnicode(encodedString);
 






Название: Re: Приём строки в Ascii по tcp
Отправлено: crossly от Ноябрь 03, 2010, 22:36
если я правильно понял и in и out это QDataStream... то вам нужно внимательно прочитать документацию по этому классу.. использовать его для приема данных из программы на билдере не стоит..


Название: Re: Приём строки в Ascii по tcp
Отправлено: azedol от Ноябрь 04, 2010, 12:48
Хорошо, а что тогда использовать?


Название: Re: Приём строки в Ascii по tcp
Отправлено: merke от Ноябрь 04, 2010, 13:01
Однозначно не использовать QDataStream.

Прочитать в инете какой ByteOrder в delphi. Далее просто читай в QByteArray из сокета методом read();

А далее уже разбирай данные!


Название: Re: Приём строки в Ascii по tcp
Отправлено: azedol от Ноябрь 25, 2010, 15:26
Спасибо всем :)
Решение проблемы:

Код
C++ (Qt)
QByteArray data = pClientSocket->read(BlockSize);
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString str = codec->toUnicode(data);