使用新的QUdpSocket重新绑定

时间:2011-01-14 15:53:25

标签: qt data-binding udp

我有一个网络应用程序,它使用UDP广播进行设备发现,但一次只接受一个连接。因此,当建立新的TCP连接时,我删除用于发现的QUdpSocket。

但是,当远程设备断开连接时,我想创建一个新的QUdpSocket并再次开始监听:

    // Set up a UDP server to respond to any "discovery" messages:
    udpServer = new QUdpSocket(this);
    if (udpServer -> bind(QHostAddress::Any, DISCOVERY_PORT))
        connect(udpServer, SIGNAL(readyRead()),
                this,      SLOT(beDiscovered()));
    else
    {
        fprintf(stderr, "UDP port not bound successfully: %d, ", udpServer ->error());
        fprintf(stderr, udpServer ->errorString().toLocal8Bit());
        fprintf(stderr, "\r\n");
        fflush(stderr);
#ifdef WIN32
        _commit(_fileno(stderr));
#else
        fsync(_fileno(stderr));
#endif
    }

然而,重新绑定失败,代码为8,“绑定的地址已被使用”。

那么,我如何确保删除'旧'QUdpSocket时,它会完全释放它绑定的地址?

Alternatievly,我应该使用QUdpSocket :: ShareAddress还是QUdpSocket :: ReuseAddressHint绑定?这似乎不对,因为它们都没有真正描述我想要的行为,即我的QUdpSocket在其生命周期内的独占绑定,并且在任何情况下,QUdpSocket :: ShareAddress都应该是Windows上的默认行为。

谢谢, 斯蒂芬。

1 个答案:

答案 0 :(得分:1)

......换句话说,问题已经回答了!