вот мой код (еще не опробован, так как сервер не готов)
void QGenericArmClient::readyRead()
{
int bytesAvail = fsocket->bytesAvailable();
#ifdef JSON_FORMAT
if(bytesAvail<=0) return;
QByteArray packetData = fsocket->readAll();
if(!packetData.isEmpty())
{
int terminatorIndex;
int prevTerminatorIndex = 0;
int dataSize = packetData.size();
terminatorIndex = packetData.indexOf('\0',prevTerminatorIndex); //ищем первый терминатор в пакете
if(terminatorIndex<0) //если нет терминатора, копируем целиком
{
fcurrentData.append(packetData);
}
else
{
do //проходимся по кадру
{
fcurrentData.append(packetData.mid(prevTerminatorIndex,(terminatorIndex-prevTerminatorIndex))); //копируем часть до терминатора
emit jsonFrameReceived(QString(fcurrentData)); //сигналим об очередной строке с json
fcurrentData.clear(); //стираем временный буфер
prevTerminatorIndex = terminatorIndex+1; //сдвигаем указатель, с которого будем искать следующий терминатор
}
while(((terminatorIndex = packetData.indexOf('\0',prevTerminatorIndex))<0) || (prevTerminatorIndex>dataSize)); //до тех пор, пока больше нет терминаторов
if(prevTerminatorIndex<dataSize)
{
fcurrentData.append(packetData.mid(prevTerminatorIndex,(dataSize-prevTerminatorIndex)));//копируем остаток
}
}
}
#endif
}
планируется гонять текст json,завершающийся нулём (признак окончания пакета).