void QClient::readyRead(){ int readBytes = fsocket->bytesAvailable(); if(readBytes<sizeof(scb_msg_t)) return; //если меньше данных чем заголовок игнорируем fsocket->read((char*)frawBuffer,sizeof(scb_msg_t)); if(fframeBuffer.msg_head->size) { freadBytes = 0; while((readBytes = fsocket->bytesAvailable())!=0) { fsocket->read((char*)frawBuffer[freadBytes],readBytes); freadBytes+=readBytes; } }...}
QByteArray arr; // где нидь глобально (всмысле как закрытый член класса)
arr.append(socket->readAll());
if(fblockSize==0) { if(fsocket->bytesAvailable()<sizeof(scb_msg_t)) return; fblockSize = fsocket->read(frawBuffer,sizeof(scb_msg_t)); if(fframeHeader.size==0) { fblockSize = 0; return; }// qDebug("block %d\n, header.size %d",fblockSize,fframeBuffer.msg_head->size); } fblockSize=fsocket->bytesAvailable(); fleftBytes = fframeBuffer.msg_head->size-sizeof(scb_msg_t); if(fblockSize>=(fleftBytes)) { fblockSize = fsocket->read(&frawBuffer[sizeof(scb_msg_t)],fleftBytes);// qDebug("fblockSize %d\n",fblockSize); fblockSize = 0; }
void QGenericArmClient::readyRead(){ if(fblockSize==0) //читаем заголовок пакета (остальное остается в буфере) { if(fsocket->bytesAvailable()<sizeof(scb_msg_t)) return; //если данных меньше чем заголовок - игнорируем freceived = fsocket->read(frawBuffer,sizeof(scb_msg_t)); //получаем заголовок if(fframeHeader->size==0) //если в заголовке стоит длина 0, игнорируем этот пакет { freceived = 0; return; } } int bytesAvail = fsocket->bytesAvailable(); //сколько еще в буфере данных? if(bytesAvail) //если что то есть { fblockSize = fsocket->read(&frawBuffer[freceived],bytesAvail); //читаем очередной блок данных со смещением на уже принятые freceived+=fblockSize; //обновляем колво принятых данных } if(freceived>=fframeHeader->size) //если данных достаточно { fmutex->lock(); qMemCopy(fdestBuffer,frawBuffer,freceived); //копируем в результирующий буфер fmutex->unlock(); emit frameReceived(freceived); //даем сигнал о том что данные приняты freceived = 0; //обнуляем счетчик принятых данных }}
int bytesAvail = fsocket->bytesAvailable(); //сколько еще в буфере данных? if(bytesAvail) //если что то есть { fblockSize = fsocket->read(&frawBuffer[freceived],bytesAvail); //читаем очередной блок данных со смещением на уже принятые freceived+=fblockSize; //обновляем колво принятых данных }
typedef struct{ uint32_t family; //Семейство uint32_t action; //Действие uint32_t size; //размер пакета time_t time; int32_t p1; int32_t p2; int32_t p3; int32_t p4; int32_t p5; int32_t p6; int32_t p7; int32_t p8;} scb_msg_t;// __attribute__ ((packed));