簡體   English   中英

使用QUdpSocket的Qt4 DNS服務器

[英]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提示? BindModeQt文檔枚舉有關ShareAddress狀態:

但是,由於允許任何服務重新綁定,因此此選項受某些安全考慮。

我不確定這些安全注意事項是什么-但是要嘗試的第一件事就是簡化您的代碼。

最后,也許問題出在onReadyRead()插槽中的代碼? 發布該代碼可能有助於我們診斷問題。

您在哪個平台上運行?

我認為出於安全原因,Linux不允許普通用戶將其綁定到1024以下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM