QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()



  1. #1
    sandrecarpe

    QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()


    ------

    Bonjour, j'ai une application qui utilise des sockets pour communiquer. demandeIdentification() répond au signal newConnexion() pour identifier le client, si je peux l'identifier, j'utilise le socket mTcpSocketFichier pour réceptionner le fichier du client, mais j'ai l'erreur QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Pourquoi ? Et comment régler ce problème ?

    Code:
    void Serveur::demandeIdentification()
    {
        QFile fileId("identifications.txt");
        mSocketIdentification = mTcpServeurFichier->nextPendingConnection();
        if(connect(mSocketIdentification, SIGNAL(readyRead()), this, SLOT(newIdentification())))
        {
            if(fileId.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                QDataStream flux(&fileId);
                while(!flux.atEnd())
                {
                    mListeIdentications.append(fileId.readLine().trimmed());
                    qDebug() << mListeIdentications.last();
                }
                 fileId.close();
            }
            else
            {
                qDebug() << "impossible d'ouvrir le fichier des identifications";
            }
        }
    
    }
    
    void Serveur::newIdentification()
    {
    
        if(mIdentification == "")
        {
            if(mSocketIdentification->bytesAvailable() < (int) sizeof(quint8))
                return;
    
            mIdentification = mSocketIdentification->readLine().trimmed();
            qDebug() << "mSocketIdentification" << QString(mIdentification);
        }
    
        if(!mIdentification.isEmpty() && !mIsIdentified)
        {
            for(int i = 0; i < mListeIdentications.length(); i++)
            {
                if(mIdentification == mListeIdentications.at(i))
                {
                    mIsIdentified = true;
                    mSocketIdentification->close();
                    mTcpSocketFichier = mTcpServeurFichier->nextPendingConnection();
                    if(connect(mTcpSocketFichier, SIGNAL(readyRead()), this, SLOT(recevoirFichier())) &&
                        connect(mTcpSocketFichier, SIGNAL(readChannelFinished()), this, SLOT(finReceptionFichier())))
                    {
                        qDebug() << "readyRead, readChannelFinished pret";
                    }
                    qDebug() << "identification ok";
                    break;
                }
            }
        }
    }
    Merci de votre aide

    -----

  2. #2
    JPL
    Responsable des forums

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Est-ce que ça a un lien avec ceci : http://forums.futura-sciences.com/pr...on-socket.html ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Oui c'est très proche de ce que l'on a déjà abordé dans ce post.
    Ne pas hésiter à nettoyer le dossier de compilation et faire une recompilation complète.

  4. #4
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Si c'est à l'exécution, afficher par debug mTcpSocketFichier juste après le
    mTcpSocketFichier = mTcpServeurFichier->nextPendingConnection();
    s'il est nul, le message s'explique

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

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Oui mon post à un lien le précédent
    En effet, mTcpSocketFichier est nul, mais je ne comprends pas pourquoi justement. Mon socket devrais attendre la prochaine connexion non ?

  7. #6
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    l'utilisation de nextPendingConnextion() doit suivre de façon directe la réception un message newConnection(), et j'ai pas l'impression de que c'est le cas, il semble que tu fais un connect intermédiaire.

  8. #7
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Ou que tu essaie de récupérer 2 sockets clients à partir d'un seul signal newConnection()

  9. #8
    sandrecarpe

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Oui j'essai de récupérer deux sockets clients mais je ferme le premier avant, donc pas possible de faire un connect intermédiaire ?

  10. #9
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Le principe est que le serveur lorsqu'il reçoit une connexion, il alloue un socket client et te fournit un pointeur dessus. Et une fois que ce socket est détruit, ben y en a plus, et il faut attendre une nouvelle connexion.

  11. #10
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Le serveur gère un certain nombre de pending connections. chaque fois que tu appelles nextPendingConnection() il alloue un socket client et retourne un pointeur dessus, et decrémente le nombre de pending connections. Si tu as une seule demande de connexion en cours, tu as le droit à un seul nextPendingConnection().

  12. #11
    invite830075ec

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    nextPendingConnection() n'attend pas la prochaine connexion. Il doit etre utilisé que quand on est sur d'avoir une demande de connexion en cours, c'est pourquoi on le met dans le slot relié au signal newConnection()

  13. #12
    sandrecarpe

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    hmm d'accord je vois. Je vais ça d'une façon différente alors
    Merci de m'avoir encore éclairé

  14. #13
    invite0bbe92c0

    Re : QObject::connect: Cannot connect (null)::readyRead() to Serveur::recevoirFichier()

    Ce test me semble plus que bizarre :

    Code:
    if(connect(mTcpSocketFichier, SIGNAL(readyRead()), this, SLOT(recevoirFichier())) &&
                        connect(mTcpSocketFichier, SIGNAL(readChannelFinished()), this, SLOT(finReceptionFichier())))
    En effet, il va provoquer deux connect successif dès l'instant où le premier ne retourne pas NULL.

    Je n'ai pas lu tout le code en détail,mais ça me semble étrange comme séquence.

Discussions similaires

  1. [Qt] connect() ne fonctionne pas
    Par invite3ba0dddb dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 04/02/2013, 15h42
  2. Jointure semantique SQL connect
    Par invite0f3760c9 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 27/04/2008, 13h38
  3. TI89 TI connect
    Par invitec053041c dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 05/04/2008, 17h57
  4. Ti connect
    Par inviteeab0141b dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 12/10/2005, 15h17
  5. Entree mp3 pour connect NAV+
    Par invite2d5b1c6a dans le forum Électronique
    Réponses: 0
    Dernier message: 25/03/2005, 16h57