[Qt-interest] QTcpSocket & QDataStream

Andreas Pakulat apaku at gmx.de
Sat Feb 5 13:00:22 CET 2011


On 05.02.11 11:02:15, pmqt71 wrote:
> Hi,
> 
> I'm sending data from a client to a server using QTcpSocket just as
> described in the fortune example. But when the server reads, it finds the
> data shifted by 4 bytes (in wich I find the length of the QByteArray used in
> the client side).
> 
> Something similar happens in the following example. QByteArray::data (or
> constData) is the same used by QTcpSocket to write a QByteArray.
> 
> 
> *QByteArray ba;*
> *char *ss = NULL;*
> * *
> *QDataStream ds(&ba, QIODevice::WriteOnly);*
> *ds << "hello";*
> *ss = ba.data();   //ss is empty*
> *ss += 4;            //ss contains "hello"*
> 
> The first 4 bytes seems to contain the length of ba: 0,0,0,6
> 
> If I don't use QDataStream I have no extra bytes:
>  *QByteArray ba;*
> *char *ss = NULL;*
> * *
> *ba.append("hello");*
> *ss = ba.data();   //ss contains "hello"*
> 
> 
> I should skip the first 4 bytes before reading my data (that already contain
> a length), but I don't find the same instruction in the fortune example.
> Where is the problem in my code?

Are you using the same qt version to read the content as you use for
writing? Or maybe you don't use Qt at all for reading? QDataStream has
an internal data format which is being used to store the data you put
into it into a list of bytes. This format is specific to QDataStream and
may change between different Qt versions, hence you can specify which
QDataStream format you want to use with the aproriate setter. So make
sure that both sides use QDataStream to read the data and they use the
same data-format version.

Andreas

-- 
Beware of a tall blond man with one black shoe.



More information about the Qt-interest-old mailing list