1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
void Client::readData()
{
//The protocol is based on QDataStream
//we start by creating a stream object
QDataStream in(tcpSocket); //l'objet "in" va nous permettre de lire le contenu du sous-paquet que vient de recevoir la socket du client.
qDebug()<< " in: " << in <<endl;
in.setVersion(QDataStream::Qt_4_0);
if (blockSize == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
{
if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))// On n'a pas reçu la taille du message en entier
{
return;
}
in >> blockSize;// Si on a reçu la taille du message en entier, on la récupère
}
// Si on connaît la taille du message, on vérifie si on a reçu le message en entier
if (tcpSocket->bytesAvailable() < blockSize)// Si on n'a pas encore tout reçu, on arrête la méthode
{
statusLabel->setText("reception non entiere");
return;
}
// Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
QByteArray nextData;
in >> nextData;
// ici on a enfin recu le message du client
statusLabel->setText("here");
if (nextData == currentData) {
QTimer::singleShot(0, this, SLOT(requestNewData()));
return;
}
currentData = nextData;
// creation of datareception.stm and copy of data
QString filename="D:/Data/tcp ip/QTandTCP-ClienQt-serverQt-SendFile-3/Qtclient/reception.stm";
QFile file( filename );
if ( file.open(QIODevice::ReadWrite) )
{
QTextStream stream( &file );
stream << currentData << endl;
}
//QLabel::setText() to display the data
statusLabel->setText(currentData);
getDataButton->setEnabled(true);
} |
Partager