使用QUdpSocket的Qt4 DNS服务器

时间:2009-09-09 04:54:38

标签: c++ qt qt4 udp

我正在为我正在处理的应用程序编写DNS服务器,但我遇到了一些困难。

我想绑定到localhost上的端口53并侦听DNS查找请求,然后发回响应。不幸的是,当我调用QUdpSocket :: bind()时,生成的套接字是不可写的。是否需要传递一个标志才能使其重新发送数据?

socket = new QUdpSocket();
connect(socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()), Qt::DirectConnection);
socket->bind(QHostAddress::LocalHost, 53, QUdpSocket::ShareAddress);

稍后,在建立连接之后,我想调用其中一个QUdpSocket :: write *方法,但这不起作用,因为writeable是false ..

2 个答案:

答案 0 :(得分:0)

首先,您确定要绑定到QHostAddress::Lockhost吗?您意识到这在任何公共网络上都不可见,对吧?只有在同一个物理盒子上的应用程序才能看到它。

其次,您没有检查QUdpSocket::bind调用的返回参数,因此您无法知道绑定调用是否实际成功。

第三,你试过没有QUdpSocket::ShareAddress提示吗?关于ShareAddress的{​​{3}}加密状态:

  

但是,因为任何服务都是   允许重新绑定,这个选项是   受到一定的保障   考虑。

我不确定这些安全考虑因素是什么 - 但首先要尝试的是简化代码。

最后,问题可能是onReadyRead()位置内的代码?发布该代码可以帮助我们诊断问题。

答案 1 :(得分:0)

您正在运行哪个平台?

我认为出于安全原因,Linux不允许普通用户绑定到1024以下。