Salut les gens!
J'ai un petit problème... Mon programme de réception marche parfaitement dans ce cas 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;
        }
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.

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