Пытаюсь отправить данные по UDP. Этот код основан на примере, где описывается работа UDP.
ВНИМАНИЕ:
Qt3.3void 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 все работает соответственно.