Sockets et threads : impossible d'écrire
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:
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
Citation:
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):
Citation:
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
Citation:
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