Qt模块化笔记之network——DNS域名系统与查询功能

本节涉及的类如下:

QDnsLookup

QDnsDomainNameRecord

QDnsHostAddressRecord

QDnsMailExchangeRecord

QDnsServiceRecord

QDnsTextRecord


DNS 是域名系统 (Domain Name System) 的缩写。

域名即我们在浏览器中输入的网址字符串。它将送到提供域名解析服务的系统中,如国内可以使用的,提供免费DNS解析服务的服务商:http://www.dnspod.cn/。它在这里会被转成目标服务器所在的IP,进而我们的浏览器可以访问服务器的资源了。

下面介绍搭建一个网站来了解DNS。

如果你要尝试的话,可申请使用免费的域名TK(http://my.dot.tk/),免费的域名解析服务(https://www.dnspod.cn),及一些免费的空间,用于存储你的网站文件。

三者具备后,在dot.tk中,我申请了个haiying.tk域名,其设置如下:


custom DNS即用我们自定义的DNS服务,下面两个Host Name都是dnspod.cn提供给我们的DNS解析服务商的地址,填入后,当访问haiying.tk时,它会送到dnspod上解析。

在dnspod上,我们为这个域名设置如下:



第一条,A记录是最为常用的记录类型了,它用于指定网站空间的IP地址。

第四条记录,当我们访问"www.haiying.tk"时,它使用别名记录,跳转到hao123首页。

TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。

一般网站仅需要这样设置,但对于支持邮件功能及其它特殊的,需要添加其它记录。

当添加记录,指向各所需填的空时,它给我们的提示如下:





我只能带你了解到这了,更为细节的东东,自己百度吧。

——————————————————————————————————————————————————————————————————

本节最重要的类QDnsLookup,通过其setName(QString) 函数,设置域名,然后可以执行其槽函数void lookup()即可实现查询,查询结果即它的各种“记录”分为几种,Qt为每种结果都提供了一个类来描述它们,即上面列表中除QDnsLookup外的几个,通过这些类可以获取相关信息。

查看QDnsLookup:

public fns:

	QDnsLookup(QObject * parent = 0)
	QDnsLookup(Type type, const QString & name, QObject * parent = 0)
	~QDnsLookup()

void	setType(QDnsLookup::Type)//设置所需要查的域名的记录类别,枚举值1
void	setName(const QString & name)//设置需要查找的域名字符串

Type	type() const
QString	name() const

Error	error() const//返回查找出错信息类型
QString	errorString() const//出错信息内容
bool	isFinished() const//查找过程是否已结束

QList<QDnsDomainNameRecord>	canonicalNameRecords() const//下面几个就是返回的"记录类型"了
QList<QDnsHostAddressRecord>	hostAddressRecords() const
QList<QDnsMailExchangeRecord>	mailExchangeRecords() const
QList<QDnsDomainNameRecord>	nameServerRecords() const
QList<QDnsDomainNameRecord>	pointerRecords() const
QList<QDnsServiceRecord>	serviceRecords() const
QList<QDnsTextRecord>	textRecords() const

1,enum QDnsLookup::Type

Constant Value Description
QDnsLookup::A 1 IPv4地址记录
QDnsLookup::AAAA 28 IPv6 地址记录
QDnsLookup::ANY 255 任何记录
QDnsLookup::CNAME 5 别名记录(该记录值为另一个域名)
QDnsLookup::MX 15 邮件交换记录
QDnsLookup::NS 2 域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。
QDnsLookup::PTR 12 PTR记录,是电子邮件系统中的邮件交换记录的一种;
QDnsLookup::SRV 33 记录了哪台计算机提供了哪个服务
QDnsLookup::TXT 16 TXT记录,一般指为某个主机名或域名设置的说明,

Public Slots

void abort()//停止查找
void lookup()

Signals

void finished()
void nameChanged(const QString & name)
void typeChanged(Type type)

来自Qt project文档的简短代码帮助你理解它的基本使用:

void MyObject::lookupServers()
{
    // Create a DNS lookup.
    dns = new QDnsLookup(this);
    connect(dns, SIGNAL(finished()),
            this, SLOT(handleServers()));

    // Find the XMPP servers for gmail.com
    dns->setType(QDnsLookup::SRV);
    dns->setName("_xmpp-client._tcp.gmail.com");
    dns->lookup();
}
void MyObject::handleServers()
{
    // Check the lookup succeeded.
    if (dns->error() != QDnsLookup::NoError) {
        qWarning("DNS lookup failed");
        dns->deleteLater();
        return;
    }

    // Handle the results.
    foreach (const QDnsServiceRecord &record, dns->serviceRecords()) {
        //这里处理&record的信息,这几个记录类都是很相似的,下方以HostAddressRecord(A记录)为例
    }
    dns->deleteLater();
}

QDnsHostAddressRecord的函数有如下几个:

QString	name() const//返回我们查找的域名
QHostAddress	value() const//找向的IP地址
quint32	timeToLive() const//即TTL了
void	swap(QDnsHostAddressRecord & other)
QDnsHostAddressRecord &	operator=(const QDnsHostAddressRecord & other)

以下按上面示例再写一个小例子,以查找我们的haiying.tk相关信息。

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QDnsHostAddressRecord>
#include <QHostAddress>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    dns = new QDnsLookup(this);
        connect(dns, SIGNAL(finished()),
                this, SLOT(handleServers()));

        dns->setType(QDnsLookup::A);
        dns->setName("haiying.tk");
        dns->lookup();
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::handleServers()
{
    if (dns->error() != QDnsLookup::NoError) {
            qWarning("DNS lookup failed");
            dns->deleteLater();
            return;
        }
        foreach (const QDnsHostAddressRecord &record, dns->hostAddressRecords()) {
            qDebug()<<record.name();
            qDebug()<<record.value();
            qDebug()<<record.timeToLive();
        }
        dns->deleteLater();
}


输出如下:

"haiying.tk"//这里只返回第一条IP记录信息,"www.haiying.tk"的解析就会是别名信息了

QHostAddress( "198.148.94.24" )

600

"f1g1ns2.dnspod.net"

QHostAddress( "122.225.217.191" )

600

"f1g1ns2.dnspod.net"

QHostAddress( "180.153.162.150" )

600

"f1g1ns2.dnspod.net"

QHostAddress( "182.140.167.188" )

600

"f1g1ns2.dnspod.net"

QHostAddress( "112.90.143.29" )

600 

与我们对它这个域名的DNS解析设置是一致的。而且可以看到, f1g1ns2.dnspod.net这个解析服务提供商有多个IP,


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,关于QT绘图系统,我可以为您提供一些基本的介绍和使用方法。 QT提供了一套强大的绘图系统,可以用来绘制各种图形、图表、文本、图像等等。QT的绘图系统主要由以下几个类组成: 1. QPainter:绘图类,用于绘制各种图形、图像、文本等。 2. QPen:画笔类,用于设置绘图的线条样式、颜色、粗细等。 3. QBrush:画刷类,用于设置绘图的填充样式、颜色等。 4. QFont:字体类,用于设置绘图的字体、大小、样式等。 5. QRect和QRectF:矩形类,用于表示矩形区域的位置和大小。 6. QImage:图像类,用于表示位图图像。 使用QT绘图系统进行绘图主要有两种方式,一种是在QWidget或QGraphicsView等控件的paintEvent事件中进行绘制,另一种是创建QPixmap或QImage等图像对象,然后使用QPainter在图像上进行绘制。 下面是一个简单的示例代码,演示了如何在QWidget中使用QT绘图系统进行绘制: ```cpp void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 设置画笔和画刷 QPen pen(Qt::red, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); QBrush brush(Qt::yellow, Qt::SolidPattern); painter.setPen(pen); painter.setBrush(brush); // 绘制矩形和椭圆 QRect rect(100, 100, 200, 100); painter.drawRect(rect); painter.drawEllipse(rect); // 绘制文本 QFont font("Arial", 20); painter.setFont(font); painter.drawText(rect, Qt::AlignCenter, "Hello, QT!"); } ``` 在这个示例代码中,我们在QWidget的paintEvent事件中创建了一个QPainter对象,然后设置了画笔和画刷,接着使用QRect定义了一个矩形区域,并使用drawRect和drawEllipse方法在该区域上绘制了矩形和椭圆。最后,使用setFont和drawText方法在矩形区域中央绘制了一段文本。 当然,QT绘图系统功能远不止于此,您可以根据需要使用更多的API进行绘制。希望这个简单的介绍可以帮助您更好地了解和使用QT的绘图系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值