Eigenes Objekt über TCP
Verfasst: 8. Oktober 2010 22:54
Hallo ich versuche ein Objekt über QTcpSocket an meinen Client zu senden. Nur wenn das Ganze am Client ankommt, gibt es einen segfault.
compile mit
Das Objekt
Der Server
Der Client
Wenn mir jemand sagen könnte, was ich falsch mache...
compile mit
Code: Alles auswählen
add_definitions(-g -march=native -DDEBUG -Wall -Wextra -pedantic -pedantic-errors -Werror -Wno-long-long -L ${CMAKE_CURRENT_SOURCE_DIR} )
Code: Alles auswählen
#include "testobject.h"
testObject::testObject()
{
}
void testObject::setMessage(QString msg)
{
this->message = msg;
}
QDataStream & operator << ( QDataStream & stream, const testObject & what )
{
stream << what;
return( stream );
}
QDataStream & operator >>(QDataStream& stream, testObject& what)
{
stream >> what;
return stream;
}
QString testObject::getMessage()
{
return this->message;
}
Code: Alles auswählen
#ifndef TESTOBJECT_H
#define TESTOBJECT_H
#include <qt4/QtCore/QObject>
class testObject : public QObject
{
Q_OBJECT
public:
testObject();
QString message;
friend QDataStream & operator << ( QDataStream & stream, const testObject & what );
friend QDataStream & operator >> ( QDataStream & stream, testObject & what );
void setMessage(QString);
QString getMessage();
};
#endif // TESTOBJECT_H
Code: Alles auswählen
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out << (quint16)0;
testObject *obj = new testObject;
obj->setMessage(QString("sadjsdajkfads"));
out << obj;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
clientConnection->write(block);
clientConnection->disconnectFromHost();
Code: Alles auswählen
QDataStream in(tcpSocket);
in.setVersion(QDataStream::Qt_4_7);
if (blockSize == 0) {
if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))
return;
in >> blockSize;
}
if (tcpSocket->bytesAvailable() < blockSize)
return;
testObject obj;
in >>obj;
qDebug() << obj.getMessage();