Bonjour,
J'ai écrit deux applications qui communiquent par QLocalServer/QLocalSocket. L'application cliente envoie des données dans le socket et le server les réceptionne. Tout semble bien de passer côté client mais du côté serveur le signal ReadyRead() n'est jamais lancé, comme si aucune donnée n'arrivait.
Code du client :
Code du serveur :
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 Lecteur::Lecteur(QWidget *parent) : QDialog(parent) { (...) socket = new QLocalSocket(this); connect(LaunchButton, SIGNAL(clicked()),this, SLOT(connecter())); connect(socket, SIGNAL(connected()), this, SLOT(litEtEnvoie())); connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(displayError(QLocalSocket::LocalSocketError))); } void Lecteur::connecter() { (...) socket->abort(); socket->connectToServer("monSocket"); } void Lecteur::litEtEnvoie() { (...) QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); while (! file.atEnd()) { QByteArray buffer; buffer = file.readLine(); out << (quint16)(buffer.size() - sizeof(quint16)); out << buffer; socket->write(block); } socket->flush(); } (...)
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 Ecrivain::Ecrivain(QWidget *parent) : QDialog(parent) { (...) server = new QLocalServer(this); if (!server->listen("monSocket")) { QMessageBox::critical(this, tr("Ecrivain"), tr("Unable to start the server: %1.") .arg(server->errorString())); close(); return; } clientConnection = new QLocalSocket(server->nextPendingConnection()); statusLabel->setText(tr("The server is running.\n")); connect(server, SIGNAL(newConnection()), this, SLOT(Prepare())); connect(clientConnection, SIGNAL(readyRead()), this, SLOT(Ecrire())); connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater())); (...) } void Ecrivain::Prepare() { file->open(QIODevice::WriteOnly); QMessageBox::information(this, tr("Message"),tr("Ouverture fichier")); blockSize = 0; (...) } void Ecrivain::Ecrire() { QMessageBox::information(this, tr("Message"),tr("Ready Read")); QDataStream in(clientConnection); in.setVersion(QDataStream::Qt_4_0); QByteArray tampon; if (blockSize == 0) { if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) return; in >> blockSize; if (clientConnection->bytesAvailable() < (int)blockSize) return; in >> tampon; file->write(tampon); } if (in.atEnd()) return; }
Partager