Bonjour lzq ami(e)s, voila j'ai un petit problème avec mon programme Qt, je passe par un thread qui gère le socket de mon programme.
le soucis st le suivant, via mon thread, je déclare et connecte mon socket dans la fonction run(), tout se passe nikel sauf que celui-ci ne reçois rien.
hors quand je passe par le thread principal, tout marche a merveille, c'est la que je comprend pas trop >_<.

j'ai bien essayer la méthode moveToThread(); mais sans résultat aussi.

voici l bout de code qui se connecte a mon socket
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
_socket->connectToHost("192.168.1.12", 9870);
 
 
		QByteArray _data;
		QDataStream packet(& _data, QIODevice::WriteOnly);
 
		packet << (quint16)CMSG_NEW_GUID_NEEDED;
		packet << (quint16)0;
		packet << (quint16)0;
 
		_socket->sendPacket(_data);
et voici ma classe qui gère les socket =) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
#include "socket.h"
#include "Thread.h"
 
using namespace std;
 
socket::socket(QString host, uint port, MainThread* t)
{
	thread = t;
 
	//_socket = new QTcpSocket(this);
	//_socket->moveToThread(thread);
	connectToHost(host, port);
 
	connect(this , SIGNAL(readyRead()), this ,  SLOT(receive()));
	connect(this , SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(erreurSocket(QAbstractSocket::SocketError)));
 
}
 
socket::socket()
{
 
}
 
void socket::erreurSocket(QAbstractSocket::SocketError erreur)
{
 
    mLoger error_log;
    std::string str;
 
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
        case QAbstractSocket::HostNotFoundError:
           str =  "ERREUR : le serveur n'a pas pu être trouvé. Vérifiez l'IP et le port.</em>";
            break;
        case QAbstractSocket::ConnectionRefusedError:
           str = "ERREUR : le serveur a refusé la connexion. Vérifiez si le programme \"serveur\" a bien été lancé. Vérifiez aussi l'IP et le port.";
            break;
        case QAbstractSocket::RemoteHostClosedError:
           str = "ERREUR : le serveur a coupé la connexion.";
            break;
        default:            
           str = "ERREUR : " + errorString().toStdString();
 
	error_log << QString::fromStdString(str);
	error_log.write();
    }
}
 
void socket::receive()
 
{
	QDataStream in(this);
 
	quint16 opcode;
 
	in >> opcode;
 
	if(opcode >= TOTAL_NUM_MSG)
	{
		cout << "opcode inconnus : " << getOpcodeName(opcode) << endl;
		return;
	}
 
	_opcodeHandle const& opcodeHandle = opcodeTable[opcode];
 
	WorldSession* session = new WorldSession(thread);
 
	(session->*opcodeHandle.handler)(*&in);
 
}
 
void socket::sendPacket(QByteArray data)
{
 
 
		mLoger error_log;
 
		error_log << "Erreur " << errorString();
		error_log.write();
		write(data);
}
merci d'avance de votre aide