【问题标题】:Qt4 DNS Server using QUdpSocket使用 QUdpSocket 的 Qt4 DNS 服务器
【发布时间】:2009-09-09 04:54:38
【问题描述】:

我正在为我正在开发的应用程序编写 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..

【问题讨论】:

    标签: c++ qt qt4 udp


    【解决方案1】:

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

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

    第三,你试过没有QUdpSocket::ShareAddress 提示吗? Qt documentation for BindMode enum 隐晦地声明了 ShareAddress

    但是,因为任何服务都是 允许重新绑定,这个选项是 受一定安全约束 考虑。

    我不确定这些安全注意事项是什么 - 但首先要尝试的事情之一就是简化您的代码。

    最后,问题可能出在onReadyRead() 插槽中的代码?发布该代码可能有助于我们诊断问题。

    【讨论】:

    【解决方案2】:

    您在哪个平台上运行?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多