Mon chat ne peut pas recevoir des données
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Mon chat ne peut pas recevoir des données



  1. #1
    djun

    Mon chat ne peut pas recevoir des données


    ------

    Bonjour,

    Je suis un débutant en c++. J'aimerais un jour arriver à programmer des logiciels. Maintenant, je suis en train de faire mon premier chat. Cela veut dire que je dois travailler à partir du réseau. Mais, mon programme n'arrive pas à recevoir des données. Quelqu'un peut-il m'aider?

    Code pour recevoir des données :

    Code:
    void FenClient::donneesRecues()
    {
        qint8 tailleMsg(0);
        QDataStream in(socket);
     
        if(socket->tailleMessage()==0)
        {
            if(socket->bytesAvailable()<(int)sizeof(quint16))
            {
                    QMessageBox::information(this,"Test du programme","byte valide pour le client dans le serveur : "+QString::number(socket->bytesAvailable()));
                    QMessageBox::information(this,"Test du programme","quint16 dans le serveur : "+QString::number(sizeof(quint16)));
                return;
            }
            in >> tailleMsg;
            socket->setTailleMessage(tailleMsg);
        }
        if(socket->bytesAvailable() < socket->tailleMessage())
        {
            QMessageBox::information(this,"Test du programme","taille du message du client dans le serveur : "+QString::number(socket->tailleMessage()));
            return;
        }
     
        QString messageRecu;
        in >> messageRecu;
     
        chatbox->append(messageRecu);
        socket->setTailleMessage(0);
        tailleMsg = 0;
    }
    Code pour envoyer des données :

    Code:
    void FenClient::on_boutonEnvoyer_clicked()
    {
        QByteArray paquet;
        QDataStream out(&paquet,QIODevice::WriteOnly);
        QString messageAEnvoyer;
        QString msgAEnvoyerEfface;
     
        if(message->font().bold())
        {
            messageAEnvoyer += "<b>";
        }
        if(message->font().italic())
        {
            messageAEnvoyer += "<i>";
        }
     
        messageAEnvoyer += "<font color='"+couleur.name()+"'><img src='"+socket->avatar()+tr("' width='25' height='25' border='1'>  <b>")+pseudo->text()+tr("</b> : ")+message->text()+"</font>";
     
        int boucle(0);
        while(boucle<messageAEnvoyer.size())
        {
            if(messageAEnvoyer[boucle]==':'&&messageAEnvoyer[boucle+1]==')')
            {
                for(int i(boucle+2);i<messageAEnvoyer.size();i++)
                {
                    msgAEnvoyerEfface += messageAEnvoyer[i];
                }
                messageAEnvoyer.replace(boucle,boucle+1,"<img src='"+QCoreApplication::applicationDirPath()+"/smile_a.png' width='15' height='15'>");
                messageAEnvoyer += msgAEnvoyerEfface;
                msgAEnvoyerEfface.clear();
            }
            boucle++;
        }
        boucle = 0;
        while(boucle<messageAEnvoyer.size())
        {
            if(messageAEnvoyer[boucle]==':'&&messageAEnvoyer[boucle+1]=='(')
            {
                for(int i(boucle+2);i<messageAEnvoyer.size();i++)
                {
                    msgAEnvoyerEfface += messageAEnvoyer[i];
                }
                messageAEnvoyer.replace(boucle,boucle+1,"<img src='"+QCoreApplication::applicationDirPath()+"/smile_b.png' width='15' height='15'>");
                messageAEnvoyer += msgAEnvoyerEfface;
                msgAEnvoyerEfface.clear();
            }
            boucle++;
        }
        boucle = 0;
        while(boucle<messageAEnvoyer.size())
        {
            if(messageAEnvoyer[boucle]==':'&&messageAEnvoyer[boucle+1]=='D')
            {
                for(int i(boucle+2);i<messageAEnvoyer.size();i++)
                {
                    msgAEnvoyerEfface += messageAEnvoyer[i];
                }
                messageAEnvoyer.replace(boucle,boucle+1,"<img src='"+QCoreApplication::applicationDirPath()+"/smile_c.png' width='15' height='15'>");
                messageAEnvoyer += msgAEnvoyerEfface;
                msgAEnvoyerEfface.clear();
            }
            boucle++;
        }
        boucle = 0;
     
        if(message->font().bold())
        {
            messageAEnvoyer += "</b>";
        }
        if(message->font().italic())
        {
            messageAEnvoyer += "</i>";
        }
     
        out << (quint16) 0;
        out << messageAEnvoyer;
        out.device()->seek(0);
        out << (quint16) (paquet.size() - sizeof(quint16));
     
        socket->write(paquet);
     
        message->clear();
        message->setFocus();
        message->setFont(QFont(message->font().family(),message->font().pointSize(),QFont::Normal));
        couleur.setNamedColor("#000000");
        QPalette palette;
        palette.setColor(QPalette::Text,couleur);
        message->setPalette(palette);
    }

    -----

  2. #2
    JPL
    Responsable des forums

    Re : Mon chat ne peut pas recevoir des données

    Mon chat ne peut pas recevoir des données
    Il dort ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    djun

    Re : Mon chat ne peut pas recevoir des données

    Citation Envoyé par JPL Voir le message
    Il dort ?

  4. #4
    satinas

    Re : Mon chat ne peut pas recevoir des données

    Salut,
    On ne sait pas comment tu as ouvert ton socket ...
    utilise la fonction debug pour vérifier que ça part et que ça arrive.
    en début de fonction donneesRecues() -> qDebug() << "réception de" << socket->bytesAvailable() << "octets"
    juste avant le socket->write(paquet) -> qDebug() << "envoi de" << paquet.count() << "octets"

  5. A voir en vidéo sur Futura
  6. #5
    djun

    Re : Mon chat ne peut pas recevoir des données

    J'ai faite :
    Code:
     QMessageBox::information(this,"test","réception de " + QString::number(socket->bytesAvailable()) + " octets");
    réception de de 749 octets
    Code:
    QMessageBox::information(this,"test","envoi de" + QString::number(paquet.count()) + "octets");
    envoi de380octets

  7. #6
    satinas

    Re : Mon chat ne peut pas recevoir des données

    L'avantage du qDebug() est qu'il n'interrompt pas le programme, contrairement au QMessageBox.
    Je vois pas trop ce qui t'arrête. Tu dis que tu reçois pas, ensuite que tu reçois.
    Si le chat n'affiche pas le message reçu, mets un qDebug() affichant l'entête taille dès sa réception, un deuxième qDebug() affichant le contenu du message dès sa réception.
    Dernière modification par satinas ; 14/12/2014 à 02h52.

  8. #7
    djun

    Re : Mon chat ne peut pas recevoir des données

    Merci pour votre aide. Ça marche

Discussions similaires

  1. Envoyer et recevoir des données binaires via RS-232
    Par LaboSW dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 07/03/2012, 19h58
  2. Recevoir des données du pic quand j'appuis sur un bouton!!!!
    Par hissokaaaa dans le forum Électronique
    Réponses: 4
    Dernier message: 03/05/2010, 16h24
  3. Borland recevoir des donnees via le port serie
    Par inviteb451b6a2 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/04/2010, 14h41
  4. Envoyer ou recevoir des données à distance ...
    Par invite63efe34e dans le forum Électronique
    Réponses: 5
    Dernier message: 23/05/2009, 22h30
  5. Recevoir des données
    Par invite3d3ce1f9 dans le forum Électronique
    Réponses: 13
    Dernier message: 10/04/2009, 12h30