首页 > 编程语言 >Qt网络编程

Qt网络编程

时间:2024-07-05 22:41:46浏览次数:13  
标签:getDomainName Qt QHostInfo 主机 编程 网络 ui IP地址 strTemp

0.前置知识

  1. Socket是不同主机之间通信的API
    IP地址用于区分不同主机/端口用于区分不用应用

  2. QHostInfo 可查找与主机名相关联的 IP 地址或与 IP 地址相关联的主机名。 该类提供了两个静态便利函数:一个是异步函数,在找到主机后发出信号;另一个是阻塞函数,返回一个 QHostInfo 对象。

  3. QNetworkInterface 表示连接到运行程序所在主机的一个网络接口。

  4. QNetworkAddressEntry 每个网络接口可包含零个或多个 IP 地址,这些地址又可与网络掩码和/或广播地址相关联(取决于操作系统的支持情况)。

1.实战代码

1. 获取主机名称以及主机名称对应的IP地址

    // 获取主机名称
    QString strLocalHostName = QHostInfo::localHostName();
    ui->lineEdit->setText(strLocalHostName);

    // 根据主机名称获取对应的IP地址
    QString strLocalAddress = "";
    QHostInfo hostinfo = QHostInfo::fromName(strLocalHostName);
    QList<QHostAddress> ipaddresslist = hostinfo.addresses();

    if (!ipaddresslist.isEmpty())
    {
        for (int i = 0; i < ipaddresslist.size(); i++)
        {
            QHostAddress addresshost = ipaddresslist[i];
            if(QAbstractSocket::IPv4Protocol == addresshost.protocol())
            {
                strLocalAddress = addresshost.toString();
                break;
            }
        }
    }
	ui->lineEdit_2->setText(strLocalAddress);

2. 返回主机找到的所有网络接口列表 + IP地址对应的信息

    QString strTemp = "";

    // 返回主机所找到的所有网络接口的列表
    QList<QNetworkInterface> netlist = QNetworkInterface::allInterfaces();

    for (int i = 0;i < netlist.size(); i++)
    {
        QNetworkInterface interfaces = netlist.at(i);
        strTemp = strTemp + "设备名称:" + interfaces.name() + "\n"; // 获取设备名称
        strTemp = strTemp + "硬件地址:" + interfaces.hardwareAddress() + "\n"; // 获取硬件地址

        QList<QNetworkAddressEntry> entrylist = interfaces.addressEntries(); // 遍历每个IP地址对应的信息
        for (int j = 0; j < entrylist.size(); j++)
        {
            QNetworkAddressEntry entry = entrylist.at(j);
            strTemp = strTemp + "IP地址:" + entry.ip().toString() + "\n";
            strTemp = strTemp + "子网掩码:" + entry.netmask().toString() + "\n";
            strTemp = strTemp + "广播地址:" + entry.broadcast().toString() + "\n";
        }
    }

    QMessageBox::information(this, "主机所有信息", strTemp, QMessageBox::Yes);

3. 查询域名或者IP地址

查询域名或IP地址类内实现
getDomainName::getDomainName(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::getDomainName)
{
    ui->setupUi(this);
    ui->lineEdit->setText("www.baidu.com");
}

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

void getDomainName::on_pushButton_clicked()
{
    // 主机名称
    QString strHostName = ui->lineEdit->text();
    ui->textEdit->append("你所查询的主机信息:" + strHostName);
    QHostInfo::lookupHost(strHostName, this, &getDomainName::lookupHostInfoFunc);
}


void getDomainName::on_pushButton_2_clicked()
{
    ui->textEdit->clear();
}

QString getDomainName::ProtocolTypeName(QAbstractSocket::NetworkLayerProtocol protocolType){
    switch (protocolType) {
    case QAbstractSocket::IPv4Protocol:
        return "IPv4 Protrcol";
    case QAbstractSocket::IPv6Protocol:
        return "IPv6 Protrcol";
    case QAbstractSocket::AnyIPProtocol:
        return "Either IPv4 or IPv6 Protrcol";
    case QAbstractSocket::UnknownNetworkLayerProtocol:
        return "Unknown Protrcol";
    default:
        break;
    }
}

void getDomainName::lookupHostInfoFunc(const QHostInfo &host)
{
    QList<QHostAddress> addresslist = host.addresses();
    for (int i = 0; i < addresslist.size(); i++)
    {
        QHostAddress host = addresslist.at(i);
        ui->textEdit->append("协议类型:" + ProtocolTypeName(host.protocol()));
        ui->textEdit->append("主机IP地址:" + host.toString());
        ui->textEdit->append("");
    }
}

标签:getDomainName,Qt,QHostInfo,主机,编程,网络,ui,IP地址,strTemp
From: https://www.cnblogs.com/xuejx/p/18285496

相关文章

  • Python基于卷积神经网络分类模型(CNN分类算法)实现时装类别识别项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景在深度学习领域,卷积神经网络(ConvolutionalNeuralNetworks,CNNs)因其在图像识别和分类任务上的卓越表现而备受关注。CNNs能够自动检测图像中的特......
  • Python实现ABC人工蜂群优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景人工蜂群算法(ArtificialBeeColony,ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根......
  • 卫星网络——Walker星座简单介绍
    一、星座构型介绍        近年来,随着卫星应用领的不断拓展,许多任务已经无法单纯依靠单颗卫星来完成。与单个卫星相比,卫星星座的覆盖范围显著增加,合理的星座构型可以使其达到全球连续覆盖或全球多重连续覆盖,这样的特性使得在全球通信或导航飞行任务中有着独特的优势,其......
  • AI网络爬虫007:批量爬取***视频搜索结果
    文章目录一、任务二、输入内容三、输出内容一、任务批量爬取***视频的搜索结果内容,包括视频标题,视频地址和视频创作者等信息。定位到元素位置:<divclass="ILGAlGLX">《梅西的Al道歉》本年度最佳Al视频,看来梅西还想在中国淘金,这才是真正的“商业头脑”#梅西......
  • set_source_files_properties QT_QML_SINGLETON_TYPE
    目录前言QT_QML_SINGLETON_TYPE 属性基本用法示例1.创建一个基本的CMake项目2.编辑 CMakeLists.txt3.创建 main.cpp4.创建 MySingleton.qml5.创建 qml.qrc6.创建 main.qml构建和运行项目结论前言在使用Qt和CMake构建项目时,有时你可能需要将......
  • 【教程】一步一步构建一个RBF神经网络-详细解说
    本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/目录一、什么是RBF神经网络1.1.RBF神经网络介绍二、matlab实现RBF神经网络2.1.matlab实现RBF代码示例2.2.代码解说一、什么是RBF神经网络1.1.RBF神经网络介绍RBF神经网络是指使用RBF作为激活函数......
  • 并发编程面试1
    一、进程,线程,协程的区别1、进程:操作系统进行资源分配和调度的基本单位。每个进程有独立的内存空间。进程通讯就采用共享内存,MQ,管道。2、线程:一个进程可以包含多个线程,线程就是CPU调度的基本单位。一个线程只属于某一个进程。线程之间通讯,队列,await,signal,wait,notity,Exchanger......
  • Python异步编程技术详解:async、await、yield和anext
    Python异步编程技术详解:async、await、yield和anext1.async和await2.yield3.anext4.StopAsyncIteration5.综合示例:异步聊天机器人总结异步编程是Python中一种强大的并发编程模式,可以显著提高I/O密集型应用的性能。本文将详细介绍Python中的几种重要的异步编......
  • 无线传感器网络期末复习
    无线传感器网络概述引言用于国防军事,国家安全环境监测、交通管理、医疗卫生、制造业、反恐赈灾通信方式:1.有线2.无线3.红外4.光短距离的无线低功率通信技术从技术特征看是无中心结点的全分布系统:1.探测感知模块2.数据处理模块3.......
  • 韦东山IMX6ULL Linux开发板基于Buildroot系统QT应用环境配置开发运行
    @目录一.编译系统1.设置交叉编译工具链2.编译系统二.QT下载1.安装Qtcreator2.创建第一个程序3.配置QtCreator开发环境4.移植QT程序到开发板一.编译系统1.设置交叉编译工具链exportARCH=armexportCROSS_COMPILE=arm-buildroot-linux-gnueabihf-exportPATH=$PATH:/hom......