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

Qt 如何让更多进程使用QUdpSocket::ShareAddress在同一台机器的同一端口上侦听?,qt,sockets,udp,localhost,Qt,Sockets,Udp,Localhost,我在使用Qt4.8的Linux上 我希望同一台机器上的2个或更多进程可以在同一端口上侦听UDP数据报。Qt文档说明QUdpSocket::ShareAddress可以做到这一点 我用此代码实现了2个接收器: connect(&rec, SIGNAL(readyRead()), this, SLOT(leggiDati())); rec.bind(QHostAddress::any, 5000, QUdpSocket::ShareAddress); “leggiDati()”函数: wh

我在使用Qt4.8的Linux上

我希望同一台机器上的2个或更多进程可以在同一端口上侦听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);
对于前面的代码,只有最后启动的进程接收数据报。如果我发送广播数据报,而不是在本地主机上,两个进程都会接收消息

有人能解释一下为什么会发生这种情况吗?
是否有任何方法允许本地主机上的通信避免发送广播消息?

这归结为理解套接字如何绑定到端口。因此,您正在体验预期的行为


关于多播UDP,我从来没有想出正确的套接字选项来允许它与QtNetwork模块一起工作。如果我真的需要使用Qt来实现这个功能,我会创建自己的套接字并使用setSocketDescriptor()。但是,我通常会对任何与UDP相关的多播操作求助。

现在,由于127.255.255.255,我成功地在这两个过程中获取了数据报。发送方将数据报发送到127.255.255.255,以便两个接收方都可以获得相同的消息。这有什么禁忌症吗?