[英]Qt4 DNS Server using QUdpSocket
我正在為正在處理的應用程序編寫DNS服務器,但遇到了一些困難。
我想綁定到本地主機上的端口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 *方法之一,但由於可寫為false,因此無法正常工作。
首先,確定要綁定到QHostAddress::Lockhost
嗎? 您意識到這在任何公共網絡上都不可見,對嗎? 它僅對同一物理盒子上的應用程序可見。
其次,您沒有檢查QUdpSocket::bind
調用的返回參數,因此您無法知道bind調用是否真正成功。
第三,您是否嘗試過沒有QUdpSocket::ShareAddress
提示? BindMode的Qt文檔枚舉有關ShareAddress
狀態:
但是,由於允許任何服務重新綁定,因此此選項受某些安全考慮。
我不確定這些安全注意事項是什么-但是要嘗試的第一件事就是簡化您的代碼。
最后,也許問題出在onReadyRead()
插槽中的代碼? 發布該代碼可能有助於我們診斷問題。
您在哪個平台上運行?
我認為出於安全原因,Linux不允許普通用戶將其綁定到1024以下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.