如何让更多进程使用QUdpSocket :: ShareAddress侦听同一台机器的同一端口?

时间:2013-06-17 09:08:51

标签: qt sockets udp localhost

我在Linux上使用QT 4.8。

我希望同一台机器上的两个或多个进程可以在UDP数据报的同一端口上侦听。 Qt文档说QUdpSocket :: ShareAddress可以做到这一点。

我用这段代码实现了2个接收器:

connect(&rec, SIGNAL(readyRead()), this, SLOT(leggiDati()));
rec.bind(QHostAddress::any, 5000, QUdpSocket::ShareAddress);

“leggiDati()”函数:

while(rec.hasPendingDatagrams()){
  QByteArray dato;
  dato.resize(rec.pendingDatagramSize());
  rec.readDatagram(dato.data(), dato.size(), &sender, & port);
}

和发件人代码:

QUdpSocket send;
QByteArray dato = "prova invio";
send.writeDatagram(dato.data(), dato.size(), QHostAddress::LocalHost, 5000);

使用前面的代码,只有最后一个进程开始接收数据报。如果我发送广播数据报而不是localhost,则两个进程都会收到消息。

任何人都可以向我解释为什么会这样吗? 有没有办法允许localhost上的通信避免发送广播消息?

1 个答案:

答案 0 :(得分:1)

这归结为了解套接字如何绑定到端口。所以你正在经历预期的行为。

Can two applications listen to the same port?

关于多播UDP,我从未想出正确的套接字选项,以允许它与QtNetwork模块一起使用。如果我真的需要坚持使用Qt来实现这个功能,我会创建自己的套接字并使用setSocketDescriptor()。但相反,我通常会使用ACE C++ library来获取与 多播 相关的任何内容。