我有一个网络应用程序,它使用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被删除时,它会完全释放它绑定的地址呢?
或者,我应该绑定QUdpSocket::ShareAddress还是QUdpSocket::ReuseAddressHint?这似乎并不正确,因为两者都没有真正描述我想要的行为,即在其生命周期内为我的QUdpSocket提供独占绑定,而且在任何情况下,QUdpSocket::ShareAddress都应该是Windows上的默认设置。
谢谢,斯蒂芬。
发布于 2011-01-15 00:20:04
...so换句话说,这个问题已经自己回答了!
https://stackoverflow.com/questions/4692936
复制相似问题