Russian Qt Forum

Qt => Работа с сетью => Тема начата: ammaximus от Октября 24, 2013, 14:30



Название: QT3.3 QDataStream & QSocketDevice
Отправлено: 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/ (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 (http://abanq-port.googlecode.com/svn/trunk/abanq-port/src/qt/src/network/qsocketdevice_unix.cpp) девайса, моя проблема в том, что t != Datagram. Получается, то ли DataStream не может сформировать кодограмму, то ли сокет не может ее распознать.

Помню как раньше мучался с UDP в Qt3.3, но уже не помню почему именно. В Qt4 все работает соответственно.


Название: Re: QT3.3 QDataStream & QSocketDevice
Отправлено: ammaximus от Октября 26, 2013, 13:28
Вот оно что! Нужен конструктор с socketDevice(QSocketDevice::Datagram), т.к. Stream не работает