ich habe eine Datenklasse die ich serialisiere und dann über socketverbindung sende und dannach wieder deserialisiere...
Auf der Empfängerseite bei der read methode hab ich ein Problem:
Wie kann ich aus einem QDataStream X*Bytes rauslesen und diese in ein QByteArray abspeichern?
Habe mit folgendem probiert:
Code: Alles auswählen
QByteArray o_datas;
m_Datastream .readBytes(o_datas.data(),lenght);
Danke Matthias
Falls das von wichtigkeit ist wege von serialisierung -> senden -> empfangen :
Datenklasse (die serialisierungs und deserialisierungs methoden):
Code: Alles auswählen
QByteArray TransferPacket::getTransmitDatas()
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_5);
out << m_Length //int;
out << m_ID //int;
out << m_Datas //QByteArray;
out.device()->seek(0);
m_Length = (UInt32)(block.size() - sizeof(m_Length));
out << m_Length;
return block;
}
void TransferPacket::setReceivedData(QByteArray ao_bytes)
{
QDataStream in(&ao_bytes, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_4_5);
in >> m_Length //int;
in >> m_ID //int;
in >> m_Datas //QByteArray;
}
meine sende methode:
Code: Alles auswählen
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_5);
out << (quint16)0;
foreach(Transportpacket o_packet, list)
{
QByteArray o_packetData = o_packet.getTransmitDatas();
out << (quint16)o_packetData.length();
out << o_packetData;
}
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
//write to the client
op_tcpSocket->write(block);
op_tcpSocket->flush();
Emfangsmethode:
Code: Alles auswählen
QByteArray l_ReceivedBlock = readAll();
QDataStream l_DataStream(&l_ReceivedBlock, QIODevice::ReadOnly);
l_DataStream.setVersion(QDataStream::Qt_4_5);
quint 16 length;
l_DataStream>> length;
//ab hier wird der code noch in einer schlaufe gelegt...
int i_lengthDataPacket = 0;
l_DataStream >> i_lengthDataPacket;
QByteArray o_datasForPacket;
//mein problem hier : wie kann ich nun aus dem Datastream
//i_lenghtDataPackt Bytes rauslesen und zugleich aus dem Stream
//nehmen...?!?!