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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT3.3 QDataStream & QSocketDevice  (Прочитано 2793 раз)
ammaximus
Гость
« : Октября 24, 2013, 14:30 »

Пытаюсь отправить данные по UDP. Этот код основан на примере, где описывается работа UDP.
ВНИМАНИЕ: Qt3.3
Код:
void ql::sendMessage(QVector<QVariant> messageVector, QMap<QString, QStringList> cats, int type, QString log, QTime time)
{
    QByteArray msg;
    #ifdef QT4
    QDataStream str(&msg, QIODevice::WriteOnly);
    #endif
    #ifdef QT3
    QDataStream str(msg, IO_WriteOnly);
    #endif
    str << QLC_COMPLEX << type << log << time;
    str << messageVector << cats;
    
    ql::writeDatagramm(msg);
}

void ql::writeDatagramm(QByteArray &msg)
{
#ifdef QT4
    QUdpSocket socket;
    socket.writeDatagram(msg.data(),msg.size(),QHostAddress(qlcAddress), port);
#endif
#ifdef QT3
    QSocketDevice socket;
    socket.setBlocking(false);
    cout << "<" << msg.data() << "> and size: " << msg.size() << endl;
    
    socket.writeBlock(msg,msg.size(),qlcAddress, port);
#endif
}

cout выдает "<> and size 59". То есть есть размер, но как бы нет данных. Здесь https://qt-project.org/forums/viewthread/14946/обсуждается, что такое вроде как возможно из-за смещения, но мне то не печатать надо, а выдавать в сокет.

Ошибка QSocketDevice::sendBlock: Not datagram. Согласно исходникам http://abanq-port.googlecode.com/svn/trunk/abanq-port/src/qt/src/network/qsocketdevice_unix.cpp девайса, моя проблема в том, что t != Datagram. Получается, то ли DataStream не может сформировать кодограмму, то ли сокет не может ее распознать.

Помню как раньше мучался с UDP в Qt3.3, но уже не помню почему именно. В Qt4 все работает соответственно.
« Последнее редактирование: Октября 24, 2013, 14:33 от ammaximus » Записан
ammaximus
Гость
« Ответ #1 : Октября 26, 2013, 13:28 »

Вот оно что! Нужен конструктор с socketDevice(QSocketDevice::Datagram), т.к. Stream не работает
« Последнее редактирование: Октября 26, 2013, 13:30 от ammaximus » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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