Salut les gens!
J'ai un petit problème... Mon programme de réception marche parfaitement dans ce cas là
mais pas dans celui-là:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 quint16 balise = 0; QByteArray dataBA = ""; if (downloadMode) { if (indexDL < toDownload.size()) { statusQL->setText("<strong>"+toDownload[indexDL]+"</strong>"); } quint32 messageSizeDL(0); //QMessageBox::information(this, "Downloading file", "Balise pas encore reçue"); // Même principe que lorsque le serveur reçoit un paquet : On essaie de récupérer la taille du message Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se basant sur la taille annoncée tailleMessage) QDataStream in(socket); if (messageSizeDL == 0) { if (socket->bytesAvailable() < sizeof(quint32)) return; in >> messageSizeDL; } QMessageBox::information(this, "Downloading file", "Taille reçue: "+QString::number(messageSizeDL)); if (socket->bytesAvailable() < messageSizeDL) { statusQPB->setValue(valFull +( (socket->bytesAvailable() ) - 6) ); return; } // Si on arrive jusqu'à cette ligne, on peut récupérer le message entier in >> balise; in >> dataBA; valFull += dataBA.size(); statusQPB->setValue(valFull); messageSizeDL = 0; //Vidage du datastream if (!in.atEnd()) { QString vidange; in >> vidange; }
Dans le second cas, il reste bloqué comme s'il n'ateignait jamais la taille du message, stockée dans messageSizeDL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 quint16 balise = 0; QByteArray dataBA = ""; if (downloadMode) { if (indexDL < toDownload.size()) { statusQL->setText("<strong>"+toDownload[indexDL]+"</strong>"); } quint32 messageSizeDL(0); //QMessageBox::information(this, "Downloading file", "Balise pas encore reçue"); // Même principe que lorsque le serveur reçoit un paquet : On essaie de récupérer la taille du message Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se basant sur la taille annoncée tailleMessage) QDataStream in(socket); if (messageSizeDL == 0) { if (socket->bytesAvailable() < sizeof(quint32)) return; in >> messageSizeDL; } //QMessageBox::information(this, "Downloading file", "Taille reçue: "+QString::number(messageSizeDL)); if (socket->bytesAvailable() < messageSizeDL) { statusQPB->setValue(valFull +( (socket->bytesAvailable() ) - 6) ); return; } // Si on arrive jusqu'à cette ligne, on peut récupérer le message entier in >> balise; in >> dataBA; valFull += dataBA.size(); statusQPB->setValue(valFull); messageSizeDL = 0; //Vidage du datastream if (!in.atEnd()) { QString vidange; in >> vidange; }
La différence?
Ligne 19, le code fonctionne si un QMessageBox apparaît, et pas si ce n'est pas le cas. Le truc, c'est que je ne veux pas que l'utilisateur aie à cliquer à chaque téléchargement de fichier, étant donné qu'il peut y en avoir..... Vraiment beaucoup.
Et je ne comprend absolument pas en quoi cette QMessageBox influe sur le déroulement du programme.
Merci d'avance pour vos analyses, conseils ou suggestions.
Cordialement,
Nihi
Partager