Qtfr

La communauté francophone

Annonce

La dernière version de Qt est sortie : Qt 4.6.3, ainsi qu'une mise à jour du SDK : Qt SDK 2010.04. QtCreator est en version : 2.0.1

La documentation de Qt 4.6 traduite en français est disponible : http://qt.developpez.com/doc/4.6/index/

Forum Qtfr

La communauté francophone

Vous n'êtes pas identifié.

#1 30-07-2010 15:55:06

plux
Membre
Date d'inscription: 30-07-2010
Messages: 5

Questions sur un serveur avec héritage de qtcpserver et qtcpsocket

Bonjour à tous smile

J'ai quelques soucis que je n'arrive pas à résoudre sur un serveur que j'ai créé en qt. Avant ça marchait, après, ça ne marche plus. En fait j'ai un peu modifié ma conception, afin de pouvoir connecter des objets entre eux avec des signaux.

Avant :
J'avais un objet SocketServer qui héritait de qTcpServer, à chaque connexion entrante, j'instanciais un objet SocketClient qui héritait de qtcpSocket (avec redéfinition de la méthode incomingConnection de qTcpServer)
Le code de la méthode :

Code:

void    SocketServeur::incomingConnection(int socket)
{
    SocketClientEcran *socketClient = new SocketClientEcran(socket);
    connect(socketClient, SIGNAL(disconnected()), this, SLOT(deconnexionClient()));
}

Après :
Mon objet SocketServer contient un qTcpServer qui comporte une méthode permettant d'instancier mon objet SocketClient. Le signal newConnection() est connecté à cette méthode. Quand un client se connecte, cette méthode est donc appelée.
Le code de la méthode en question :

Code:

 
    QTcpSocket *socket;
    if ((socket = _serveur->nextPendingConnection()) != 0)
    {
        SocketClient *ecran = new SocketClient(socket->socketDescriptor());
        connect(ecran, SIGNAL(disconnected()), this, SLOT(deconnexionEcran()));
    }

Et pour finir, le code de mon objet SocketClient qui hérite de QTcpSocket

Code:

SocketClient::SocketClient(int socket)
{
    if (!this->setSocketDescriptor(socket))
        qDebug() << "Invalid socket descriptor";
    _typeClient = NON_AUTH;
    connect(this, SIGNAL(readyRead()), this, SLOT(lecture()));
}

En fait, lors de l'execution, la connexion entre le signal ReadyRead et mon slot ne fonctionne pas dans le deuxième cas (le programme ne rentre pas dans la méthode). Et j'ai un message sur ma console quand je déconnecte mon client : QSocketNotifier: Invalid socket 23 and type 'Read', disabling...

Je peux dérouler d'avantage de code, mais j'ai essayé de résumer le coeur du problème.

Hors ligne

 

#2 12-08-2010 02:36:55

plux
Membre
Date d'inscription: 30-07-2010
Messages: 5

Re: Questions sur un serveur avec héritage de qtcpserver et qtcpsocket

N'ayant pas trouvé de solution, j'ai gardé l'ancienne conception qui fonctionne bien. N'empêche que si quelqu'un maîtrise bien les qTcpServer, je veux bien qu'il m'explique smile
J'aimerai comprendre d'où venait mon problème pour la suite.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr