Я пишу простое клиент-серверное приложение на Qt, и у меня проблема с чтением данных на стороне клиента.Данные попадают в клиент, но я не могу извлечь их в переменные в классе, они, похоже, уничтожены.
Код выглядит так:
Получатель:
void ClientTcpHelper::UnpackData(){
stream=new QDataStream (&this->socket);
stream->startTransaction();
*stream>>P1_X>> P1_Y>>P2_X>> P2_Y>>Ghost1_X>>Ghost1_Y>>Ghost2_X>>Ghost2_Y>> Ghost3_X>>Ghost3_Y>> Ghost4_X>>Ghost4_Y>> Ghost5_X>>Ghost5_Y
>> Ghost6_X>>Ghost6_Y>>Ghost1_state>>Ghost2_state>>Ghost3_state>>Ghost4_state>>Ghost5_state>>Ghost6_state>>P1_HP>>P2_HP>>P1_Score>>P2_Score;
if(!stream->commitTransaction()){
return;
}
delete stream;
qDebug()<<"P1_X"<<P1_X<<" P1_Y: "<<P1_Y<<"P1 score:"<<P1_Score <<endl;
qDebug()<<"P2_X"<<P2_X<<" P1_Y: "<<P2_Y<<"P1 score:"<<P2_Score <<endl;
emit DataReceived(); }
Отправитель (на стороне сервера):
void ServerTcpHelper::SendPacket(){
qDebug()<<"sending.."<<endl;
stream=new QDataStream (&this->Data,QIODevice::OpenModeFlag::ReadWrite);
*stream<<P1_X<<P1_Y<<P2_X<<P2_Y<<Ghost1_X<<Ghost1_Y<<Ghost2_X<<Ghost2_Y<< Ghost3_X<<Ghost3_Y<< Ghost4_X<<Ghost4_Y<< Ghost5_X<<Ghost5_Y
<< Ghost6_X<<Ghost6_Y<<Ghost1_state<<Ghost2_state<<Ghost3_state<<Ghost4_state<<Ghost5_state<<Ghost6_state<<P1_HP<<P2_HP<<P1_Score<<P2_Score;
if(P1socket->state()==QTcpSocket::ConnectedState){
P1socket->write(Data);
P1socket->waitForBytesWritten(50);
}
if(P2socket->state()==QTcpSocket::ConnectedState){
P2socket->write(Data);
P2socket->waitForBytesWritten(50);
}
delete stream;
Data.clear();}
Поток отладки от получателя показывает действительные значения (например, P1_X: 960 P1_Y: 40 P1_Score: 48), но эти значения, похоже, не длятся долго, они обнуляются, когда UnpackData закончен (я имею в виду - когда я пытаюсь получить их с помощью Getters of ClientTCPHelper в основной программе).