Bonsoir,

Je suis confronté depuis un petit moment à un problème bien ennuyeux. Ça concerne les sockets, grâce à un analyseur de trafic réseau j'ai pu déterminer que les données étaient bien envoyées par le serveur au client. Et de plus que les données sont bien reçues par le client. Mais ! Le signal readyRead() n'est jamais émis !

Voici le code :

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
System::System(QSettings *settings, QSystemTrayIcon *sysTray) : QObject()
{
	_server = new QTcpServer;
	_client = new QTcpSocket;
	_sysTray = sysTray;
	_settings = settings;
 
	if(!_server->listen(QHostAddress::Any, settings->value("localPort").toInt()))
		sysTray->showMessage("Erreur de connexion", "La connexion na pas pu être établie sur le port <strong>"+QString::number(settings->value("localPort").toInt())+"</strong>. Vérifiez la configuration de votre pare-feu et de votre router.", QSystemTrayIcon::Critical, 5000);
	else
	{
		_client->connectToHost(settings->value("targetHost").toString(), settings->value("targetPort").toInt());
		connect(_client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(clientError(QAbstractSocket::SocketError)));
		connect(_client, SIGNAL(connected()), this, SLOT(connected()));
		connect(_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
	}
}
 
void System::sendAlert()
{
	QByteArray packet;
	QDataStream out(&packet, QIODevice::WriteOnly);
 
	out << "K";
 
	_distantClient->write(packet);
}
 
void System::connected()
{
	_sysTray->setIcon(QIcon(":/idle.png"));
	_sysTray->setToolTip("Prêt - Aucune alerte");
}
 
void System::newConnection()
{
	_distantClient = _server->nextPendingConnection();
	_sysTray->showMessage("Connecté", "Connecté", QSystemTrayIcon::Information);
	connect(_distantClient, SIGNAL(readyRead()), this, SLOT(alertReceived()));
}
 
void System::alertReceived()
{
	std::cout << "Recu" << std::endl;
 
	QDataStream in(_distantClient);
 
	QString datas;
	in >> datas;
 
	QMessageBox::information(NULL, datas, datas);
}
J'ai essayé de désactiver le pare-feu mais sans succès.

Merci d'avance !

EDIT : J'ai fait une petite erreur, pour le readyRead() c'est _client qui émet le signal et pas _distantClient. Maintenant le signale est émis au bon moment (quand le serveur envoie les données au client), cependant les données reçues sont vides _client->bytesAvailable() vaut 0.

EDIT2 : Bon, j'ai envoyé un packet beaucoup plus grand, j'arrive à récupérer la taille du message avec _client->bytesAvailable(), mais quand je tente de récupérer les données dans un QString, ce dernier est vide !