我在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上的通信避免发送广播消息?
答案 0 :(得分:1)
这归结为了解套接字如何绑定到端口。所以你正在经历预期的行为。
Can two applications listen to the same port?
关于多播UDP,我从未想出正确的套接字选项,以允许它与QtNetwork模块一起使用。如果我真的需要坚持使用Qt来实现这个功能,我会创建自己的套接字并使用setSocketDescriptor()。但相反,我通常会使用ACE C++ library来获取与 多播 相关的任何内容。