IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

QUdpSocket en tant que QIODevice pour IPC


Sujet :

Réseau

  1. #1
    Invité
    Invité(e)
    Par défaut QUdpSocket en tant que QIODevice pour IPC
    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 :
    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);
            [...]
    La fonction receive() appelle device->readAll();

    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 ?
    Dernière modification par Invité ; 15/05/2018 à 10h13.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai trouvé une solution intermédiaire.

    En fait, il n'est pas possible d'utiliser un code totalement générique des deux côtés de la communication.

    L'un des deux programmes doit être configuré en serveur (avec la fonction bind()) et utiliser la fonction readDatagram() pour pouvoir récupérer le port et l'adresse du client auquel il doit répondre. Il doit ensuite utiliser ces deux valeurs avec writeDatagram().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Permission denied en tant que root pour éditer un fichier
    Par gamerome dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 03/12/2009, 16h04
  2. Réponses: 19
    Dernier message: 02/06/2008, 19h41
  3. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  4. Réponses: 5
    Dernier message: 21/09/2007, 17h29
  5. Réponses: 1
    Dernier message: 28/06/2007, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo