杭州网站建设找思创,冷门行业做网站的优势,兰州新增94个高风险区,免费psd素材网站学习目标#xff1a;网络信息获取操作
前置环境
运行环境:qt creator 4.12
学习内容
一、Qt 网络编程基础
Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRe…学习目标网络信息获取操作
前置环境
运行环境:qt creator 4.12
学习内容
一、Qt 网络编程基础
Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRequest/QNetworkAccessManager。Qt 网络编程模块还提供了基于安全套接字层协议(SSL)的安全网络通信类。开发过程中需要在项目配置文件中添加 QT network 以引入网络模块。QHostInfo 类提供了查询主机名、IP 地址、DNS 域名等信息的静态函数。QNetworkInterface 类用于获取主机所有 IP 地址和网络接口列表信息
QHostInfo类提供了一些常用的成员函数,用于获取主机名和IP地址等信息。以下是一些常用的成员函数:
QHostInfo.localHostName(): 返回当前主机的主机名。QHostInfo.localDomainName(): 返回当前主机的域名。QHostInfo.addresses(): 返回与主机名关联的所有IP地址列表。QHostInfo.lookupHost(const QString hostname, QObject *receiver, const char *member): 异步查找指定主机名对应的IP地址列表,当查找完成时会发送一个finished()信号。QHostInfo::fromName(const QString name): 同步查找指定主机名对应的IP地址列表,返回一个QHostInfo对象。QHostInfo.error(): 返回最近一次查找操作中发生的错误。QHostInfo.errorString(): 返回最近一次查找操作中发生的错误描述。QHostInfo.addLookup(const QString hostname): 添加一个新的主机名查找任务。QHostInfo.cancelAllLookups(): 取消所有正在进行的主机名查找任务。
QNetworkInterface是Qt中用于获取网络接口信息的类,它提供了以下一些常用的成员函数: QListQNetworkInterface allInterfaces(): 返回系统中所有可用的网络接口列表。 QListQNetworkAddressEntry addressEntries(): 返回当前网络接口的所有IP地址条目。 QString name(): 返回网络接口的名称。 QString humanReadableName(): 返回更加易读的网络接口名称。 QNetworkInterface::InterfaceFlags flags(): 返回网络接口的标志位,用于表示接口的状态和特性。 quint16 index(): 返回网络接口的索引号。 QNetworkAddressEntry address(): 返回网络接口的主IP地址。 QListQNetworkAddressEntry allAddresses(): 返回网络接口的所有IP地址条目。 quint64 hardwareAddress(): 返回网络接口的MAC地址。 bool isValid(): 检查网络接口是否有效。 bool isLoopBack(): 检查网络接口是否为回环接口。 bool isPointToPoint(): 检查网络接口是否为点对点连接。
实现项目
1.通过域名查询对方主机ip
这里出现两个ip是因为百度进行了ip转发 2.本机网络信息获取
Qt获取网络信息编程
1.本机网络信息获取
#include dialog.h
#include ui_dialog.hDialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui-setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_2_clicked() //获取ip/主机名称
{QString localname QHostInfo::localHostName();ui-lineEdit-setText(localname);QHostInfo info QHostInfo::fromName(localname);QListQHostAddress ipaddr info.addresses();foreach(const QHostAddress addr,ipaddr){if(addr.protocol() QAbstractSocket::IPv4Protocol){qDebug()IPv4 address:addr.toString();ui-lineEdit_2-setText(addr.toString());}else if(addr.protocol() QAbstractSocket::IPv6Protocol){qDebug()IPv6 address:addr.toString();}}}void Dialog::on_pushButton_clicked() //获取详细信息
{//枚举所有的网络接口,然后获取每个接口的IP地址条目,同样区分IPv4和IPv6地址进行输出。QListQNetworkInterface netinterface QNetworkInterface::allInterfaces();QString result;for (int i0;inetinterface.size();i) { //遍历所有网络接口QNetworkInterface interfacenetinterface.at(i);result设备名称interface.name()\n; // 返回网络接口的名称,如以太网或WLAN等。result硬件地址interface.hardwareAddress()\n; //获取当前网络接口的硬件地址(MAC地址),//从当前网络接口获取所有的地址条目列表。 QNetworkAddressEntry 表示一个IP地址条目,包含IP地址、子网掩码和广播地址等信息。QListQNetworkAddressEntry entrylist interface.addressEntries();for (int k0;kentrylist.size();k) {QNetworkAddressEntry etry entrylist.at(k);resultIp地址etry.ip().toString()\n;result子网掩码etry.netmask().toString()\n;result广播地址etry.broadcast().toString()\n;}}qDebug()网卡接口全部信息:result;QTextEdit *set new QTextEdit(result,this);ui-verticalLayout_3-addWidget(set);
}2.通过域名查询对方主机ip
#include dialog.h
#include ui_dialog.hDialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui-setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_2_clicked() //查询dns
{QString name ui-lineEdit-text();ui-plainTextEdit-appendPlainText(正在查询的主机信息name);QHostInfo info QHostInfo::fromName(name);QListQHostAddress addrs info.addresses();for (int i0;iaddrs.size();i) {QHostAddress addr addrs.at(i);QString proto;switch (addr.protocol()) {case QAbstractSocket::IPv4Protocol:proto IPv4 Protocol;break;case QAbstractSocket::IPv6Protocol:proto IPv6 Protocol;break;case QAbstractSocket::AnyIPProtocol:proto Any IP Protocol;break;default:proto Unknown Network Layer Protocol;}ui-plainTextEdit-appendPlainText(协议类型proto);ui-plainTextEdit-appendPlainText(主机IP地址: addr.toString());}}void Dialog::on_pushButton_clicked() //清空
{ui-plainTextEdit-clear();
}总结
计算机ip信息获取主要通过name 交由QhostInfo然后通过info 获取addr等信息之后遍历ip表即可获得。
最后附上源代码链接 对您有帮助的话帮忙点个star
32-networkinfo · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)
33-dns-netinfo · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)