Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt и сеть


Автор: shutffl 12.1.2009, 22:40
Доброго времени суток!

Пишу сетевой проект на Qt. Проект почти закончен. Но никак не могу придумать, как передать в цикле массив quint16.

Код

for(int i=0; i<16; i++)
    {
      QByteArray d;

      d = QByteArray::number(wrd_rej[i]);
      //ShowInfoMsg(d);
      conn_r->write(d);
    }


Нужно передать массив (quint16 wrd_rej[16]). Если передаю на сервер таким способом, то получается строка(!), содержащая все(!) значения массива. Например: 1234567, если в массиве было 1,23,4,567.
Я что-то не понял в сетевом взаимодействии в Qt? Или просто надо с регулярными выражениями возиться? Передавать строку с разделителем, а потом ее в массив запихивать. В свое время под gcc (на чистом C) писал проги с сокетами. И клиенты, и сервера. Там я и структуры передавал. А уж просто int - халява.
Где по этому поводу почитать?

PS:
Пишу под Windows. Потом будет перенос под Linux. 

Автор: pan2004 12.1.2009, 22:47
Ну наверно дело здесь:

Цитата(shutffl @  12.1.2009,  22:40 Найти цитируемый пост)
QByteArray::number(wrd_rej[i])

конвертируешь число в строку(аналогично QString::number). А этого и не надо.

Добавлено через 5 минут и 2 секунды
Вообще непонятно зачем QByteArray, больше бы подошел QDataStream

Автор: shutffl 13.1.2009, 02:37
Спасибо за ответ!

В строку перевожу для передачи, так как передать можно только строку. write().

А можно коротенький примерчик по QDataStream?

В Assistent читал в свое время что-то. Только как-то не въехал. Надо перечитать будет.

Автор: SABROG 13.1.2009, 09:46
Тогда QTextStream. А ему в конструктор уже сокет передавай.

Автор: shutffl 13.1.2009, 12:32
Все получилось. Всем огромное спасибо. Оказалось очень просто. Но это же Qt)

Привожу кусок рабочего кода.

Отправка:
Код

for(int i=0; i<16; i++)
    {
      QDataStream out(conn_r);
      out << wrd_rej[i];
    }


Получение:
Код

for (quint8 i = 0; i < 16; i++)
        {
          QDataStream in(conn_r);
          in >> wrd_rej[i];
        }


Напоминаю, что
Код

quint16 wrd_rej[16];

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)