QString str("peter");QByteArray block;QDataStream out(&block,QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_4_0);out<<a<<str;out.device()->seek(0);out<<(quint16)(block.size()-sizeof(qint16));//в счётчик записано 14 байт ,а block.size() тоже 16 байтthis->write(block);//передалось нормально и отобразилось на аля fortune client нормально
str=QString("sos"); block.clear(); i=block.size();//i=0 out<<a<<str; t=block.size();//t=14!!!!! out.device()->seek(0); t=block.size()-sizeof(qint16);//t=12 out<<(quint16)(t); this->write(block);// передалось и не отобразилось
C++ (Qt) QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out << QString("sos"); qFatal("block size = %d, content = %s", block.size(), block.toHex().data());
block size = 10, content = 000000060073006f0073
C++ (Qt)out << str;out << str;out << str;
C++ (Qt) static qint16 blockSize=0; QString a; emit TextOutput("Socket:ready read "+QString::number(sock->bytesAvailable())+"bytes"); QDataStream in(sock); QByteArray block; QDataStream tmp(&block,QIODevice::ReadOnly); int ba; in.setVersion(QDataStream::Qt_4_0); while(sock->bytesAvailable()>0) // есть ещё байты что прочитать можно { //фактически фортун клиент, только я тут читаю в строку определённо число байт if (blockSize == 0) { if (sock->bytesAvailable() < (int)sizeof(quint16)) return; in >> blockSize;//длинна полученной строки в байтах } ba=sock->bytesAvailable(); if (ba < blockSize) return; block=sock->read(blockSize);//читаем длинну строки в байтах tmp.setVersion(QDataStream::Qt_4_0); tmp>>a;//и запихиваем в QString emit TextOutput("Socket:recv "+QString::number(blockSize)+" bytes="+a); ba=sock->bytesAvailable(); //sock->write(a.toLocal8Bit()); blockSize=0; } }
C++ (Qt)QString str = tr( "sos" );QByteArray block;QDataStream out(&block, QIODevice::WriteOnly);out << size; // Размер блока как в примереout << QString( "Str1" );out << QString( "Str2" );out << QString( "Str3" );// Отправка block
C++ (Qt)// Чтение размера блока// Ожидание и чтение всего блокаQString str1, str2, str3;in >> str1 >> str2 >> str3;
C++ (Qt)QString str = tr( "sos" );QByteArray block;QDataStream out(&block, QIODevice::WriteOnly);out << size; // Размер блока как в примереout << QString( "Str1" );out << QString( "Str2" );out << QString( "Str3" );