Bonjour à tous,
Je suis en train de coder en qt thread + socket.
J'ai une première question, je lis que le thread n'est pas utile que les méthodes sont asynchrones, mais si je souhaite resté à l'écoute, il me faut bien faire une boucle while (1), donc dans un thread ??

Sinon, ma problématique est que le write ne fonctionne pas, il faut obligatoirement que je déconnecte la socket pour que ça marche

Voici mon run()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void FortuneThread::run()
{
    while (!quit) {
 
        while (thsocket->bytesAvailable() < (int)sizeof(quint16)) {
            if (!thsocket->waitForReadyRead(Timeout)) {
                emit error(thsocket->error(), thsocket->errorString());
                return;
            }
        }
 
       ...
    }
}
Pour initialiser le pointeur thsocket, j'ai une méthode qui set la valeur
void FortuneThread::setThSocket(QTcpSocket *sock)
{
this->thsocket = sock;
qDebug () << "init thSocket : " << this->thsocket;
}
et cette méthode est appelée à partir d'une autre classe (class BlockingClient : public QDialog):
socket = new QTcpSocket(this);
socket->connectToHost("monip", monport);

if (!socket->waitForConnected(1)) {
qDebug()<<"connection refused";
return;
}
else{
qDebug()<<"connection done : " << socket;
}

fThread.setThSocket(socket);
Une fois l'init fait, je souhaite faire une write à partir de ma classe BlockingClient
void BlockingClient::requestRegister()
{
qDebug ()<<"register";


QByteArray paquet;
QDataStream out(&paquet, QIODevice::WriteOnly);
paquet.clear();

out << "{montexte}";
out.device()->seek(0);
out << (quint16) (paquet.size() - sizeof(quint16));
paquet.remove(0,4);
socket->write(paquet);

//socket->disconnectFromHost();

qDebug ()<<"register done";

}
Le problème est que si je ne fais pas le disconnectFromHost, la requête ne part pas ????

Merci de votre aide