Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пустой QDataStream из сокета, Не подгружаются данные в QDataStream 
V
    Опции темы
rudolfninja
Дата 2.12.2013, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: нет
Всего: 6



Здравствуйте.
Пишу на QT клиент для чата. Сервер написан на питоне, но это сейчас не важно. Проблема в том, что не могу "прочитать" то, что приходит от сервера (сразу поясню, что _socket - объект QTcpSocket):
Код

void MainWindow::slot_ready_read_from_server()
{
    QByteArray data = _socket->readAll();
    QDataStream in(&data, QIODevice::ReadOnly);
    QString type;
    in >> type;
    
    if(type == "#users_list"){
        ui->users_listWidget->clear();
        int count = 0;
        in >> count;

        for(int index = 0; index < count; index++){
            QListWidgetItem *newItem = new QListWidgetItem;
            QString nickname;
            in >> nickname;
            newItem->setText(nickname);
            ui->users_listWidget->insertItem(index, newItem);
        }
    }
    if(type == "#user_info"){
        QString nickname, ip, comp_name;
        in >> nickname >> ip >> comp_name;
        ui->chat_textBrowser->append("Nickname: " + nickname);
        ui->chat_textBrowser->append("Ip Address: " + ip);
        ui->chat_textBrowser->append("Computer name: " + comp_name);
    }
    if(type == "#available_port"){
        int port = 0;
        in >> port;
    }
}

Код не полный, но проблема в нем есть. После первой строки кода, данные в массиве data есть. Но когда я пытаюсь сделать на основе этого массива QDataStream, то поток (в моем случае in) пустой. И когда я пытаюсь из него получить type - то и строка пустая.
Пробовал по-разному: передавать в конструктор QDataStream сокет, передавать в конструктор data.data(). Ничего не помогло.
Если кто знает как решить проблему, подскажите, пожалуйста.
Спасибо.
PM MAIL Skype   Вверх
borisbn
Дата 3.12.2013, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(rudolfninja @  2.12.2013,  23:32 Найти цитируемый пост)
 Сервер написан на питоне, но это сейчас не важно

Думаю, как раз, важно.
Читать строки, числа и т.п. из QDataStream можно только если данные были положены в такой же QDataStream (к тому же той же версии). Судя по всему, на той стороне ты кидаешь данные просто как строка, число, и т.д.
Вот цитата из документации по QDataStream:
Цитата
To take one example, a char * string is written as a 32-bit integer equal to the length of the string including the '\0' byte, followed by all the characters of the string including the '\0' byte. When reading a char * string, 4 bytes are read to create the 32-bit length value, then that many characters for the char * string including the '\0' terminator are read.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
rudolfninja
Дата 4.12.2013, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: нет
Всего: 6



borisbn, спасибо. Вероятнее всего, проблема именно в этом. 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.