我正在为我正在处理的应用程序编写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 ..
答案 0 :(得分:0)
首先,您确定要绑定到QHostAddress::Lockhost
吗?您意识到这在任何公共网络上都不可见,对吧?只有在同一个物理盒子上的应用程序才能看到它。
其次,您没有检查QUdpSocket::bind
调用的返回参数,因此您无法知道绑定调用是否实际成功。
第三,你试过没有QUdpSocket::ShareAddress
提示吗?关于ShareAddress
的{{3}}加密状态:
但是,因为任何服务都是 允许重新绑定,这个选项是 受到一定的保障 考虑。
我不确定这些安全考虑因素是什么 - 但首先要尝试的是简化代码。
最后,问题可能是onReadyRead()
位置内的代码?发布该代码可以帮助我们诊断问题。
答案 1 :(得分:0)
您正在运行哪个平台?
我认为出于安全原因,Linux不允许普通用户绑定到1024以下。