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()
Pour initialiser le pointeur thsocket, j'ai une méthode qui set la valeur
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; } } ... } }
et cette méthode est appelée à partir d'une autre classe (class BlockingClient : public QDialog):void FortuneThread::setThSocket(QTcpSocket *sock)
{
this->thsocket = sock;
qDebug () << "init thSocket : " << this->thsocket;
}
Une fois l'init fait, je souhaite faire une write à partir de ma classe BlockingClientsocket = new QTcpSocket(this);
socket->connectToHost("monip", monport);
if (!socket->waitForConnected(1)) {
qDebug()<<"connection refused";
return;
}
else{
qDebug()<<"connection done : " << socket;
}
fThread.setThSocket(socket);
Le problème est que si je ne fais pas le disconnectFromHost, la requête ne part pas ????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";
}
Merci de votre aide
Partager