void EchoThread::recievmessages( const QString &strmessage, const QString &arg ){ QByteArray block2; QDataStream out(&block2, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_4); out << (quint16)0; // конец блока out << arg; //куда отправляем сообщение out << strmessage; //строка сообщения out.device()->seek(0); //подсчет колличества байтов в сформированном пакете и отсылка информации quint16 byte = (block2.size() - sizeof(quint16)); out << byte; //подсчитаем реальный размер блока в байтах emit writeToSocket(block2);}
quint16 byte = (block2.size() - sizeof(quint16));
//Получаем данные от сервера, и вывожу полученную информацию в нужные места в клиентеvoid ClientRam::updateTcpWidget(){ QString arg; QString strmessage; QDataStream in(&tcpSocket); in.setVersion(QDataStream::Qt_4_4); viewResultAction->setEnabled(true); forever { if (nextBlockSize == 0) { if (tcpSocket.bytesAvailable() < sizeof(quint16)) break; in >> nextBlockSize; } if (nextBlockSize == 0xFFFF) { connectUp = false; closeConnection(); break; } if (tcpSocket.bytesAvailable() < nextBlockSize) break; in >> arg; in >> strmessage; //вывод информации в поле вывода if (arg == tr( "вывод" )){ emit recievmessages(strmessage); //вывожу информацию в поле вывода.... } //вывод информации в статусбар if (arg == tr( "статус" )){ statusBar()->showMessage(strmessage );//вывожу информацию в статус бар.... } nextBlockSize = 0; //готовы получить новую порцию данных }//конец forever}
if (nextBlockSize == 0xFFFF)
if (tcpSocket.bytesAvailable() < nextBlockSize) break;
C++ (Qt)void ClientRam::updateTcpWidget(){ QString arg; QString strmessage; QDataStream in(&tcpSocket); in.setVersion(QDataStream::Qt_4_4); viewResultAction->setEnabled(true);while ( tcpSocket.state() == QAbstractSocket::ConnectedState ) { if (nextBlockSize == 0) { if (tcpSocket.bytesAvailable() < sizeof(quint16)) continue; in >> nextBlockSize; } if (tcpSocket.bytesAvailable() < nextBlockSize) continue; in >> arg; in >> strmessage; //вывод информации в поле вывода if (arg == tr( "вывод" )){ emit recievmessages(strmessage); //вывожу информацию в поле вывода.... } else //вывод информации в статусбар if (arg == tr( "статус" )){ statusBar()->showMessage(strmessage );//вывожу информацию в статус бар.... } else { statusBar()->showMessage( "НЁХ: " + arg + ": "+ strmessage );//вывожу информацию в статус бар.... } nextBlockSize = 0; //готовы получить новую порцию данных }//конец forever}