Bonjour,
J'ai quelques difficulté avec la classe QUdpSocket, qui ne fonctionne pas dans mon projet.
Mon but est d'utiliser une QUdpSocket pour faire communiquer ensemble deux programmes de la même machine.
Seulement le gestionnaire de connexion est une classe qui peut gérer plusieurs types de connexion (Udp, Serial, File, etc), je dois donc me limiter aux fonctions de QIODevice pour utiliser ce UdpSocket.
Dans mon progamme test, je le crée de cette manière :
Fonction de création :
La fonction receive() appelle device->readAll();
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 [...] else if(DeviceFactory::isUdpSocket(name)) { QUdpSocket* socket = new QUdpSocket; socket->bind(QHostAddress::LocalHost, DeviceFactory::getUdpPort(name)); socket->connectToHost(QHostAddress::LocalHost, DeviceFactory::getUdpPort(name)); if(socket->waitForConnected()) { device = socket; // device est un attribut de type QIODevice* utilisé dans le reste de la classe qInfo() << "Socket connected " << name; } else qWarning() << QObject::tr("Socket %1 not connected :\n\t").arg(name) + socket->errorString(); } [...] if(device) connect(device, &QIODevice::readyRead, this, &CommuniactionHandler::receive); [...]
Le problème est que, lorsque je lance deux instances de mon programme pour les faire communiquer entre eux sur le même port, rien ne passe, le second ne reçoit pas ce que le premier a envoyé.
Je me suis bien assuré, avec que le qInfo() que le socket est bien connecté des deux côtés, mais le signal readyRead() n'est jamais émit.
Qu'est-ce que je fais de travers ?
Partager