当前位置: 首页 > wzjs >正文

卧龙区网站建设哪家好做网站的公司

卧龙区网站建设哪家好,做网站的公司,铜陵app网站做营销招聘信息,百度网站排名规则【QT】通讯类HttpAPI:获取MAC、主机IP、端口IP有效性判断 前言端口和IP有效实现获取主机MAC地址获取主机IP地址合法性判断 测试 前言 在进行QT客户端编写过程中,界面获取主机MAC地址和IP地址,是常有的事情,可以方便用户了解当前主…

【QT】通讯类HttpAPI:获取MAC、主机IP、端口IP有效性判断

  • 前言
  • 端口和IP有效
  • 实现
    • 获取主机MAC地址
    • 获取主机IP地址
    • 合法性判断
  • 测试

前言

在进行QT客户端编写过程中,界面获取主机MAC地址和IP地址,是常有的事情,可以方便用户了解当前主机的状况,没有必要进行CMD的指令查询。而且如果涉及到需要输入IP和端口的场景,进行输入值的有效性判断也显得很有必要,在之前博文【QT】对话框dialog类封装中,我们也有所提及,可以便于建立通讯连接的准确性。而且人工输入误差在所难免,进行有效性判断,也是起到了校验的作用,减少通讯失败情况的发生。因此,本篇博文主要就是对以上提及的三个方法进行封装,便于后续直接使用,且让封装的类HttpAPI具有一定的普适性

端口和IP有效

有效的端口号应该在0-65535有效范围内;合法IPv4应该是4段,且每段0-255。因此IP正则规则如下:

QRegularExpression ipv4Regex(R"(^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)");

对该规则进行解释:

  • 使用竖线 | 分隔,表示或关系。
  • 25[0-5]:匹配 250-255,以25开头,第三位是0-5。
  • 2[0-4][0-9]:匹配 200-249,以2开头,第二位是0-4,第三位是0-9。
  • [01]?[0-9][0-9]?:匹配 0-199,[01]?可选的0或1(表示 100-199),[0-9]必须有一个数字(0-9),[0-9]?可选的第二个数字(用于两位数,如 10-99)。
  • 起始和结束锚点:^ 和 $ 确保整个字符串严格匹配,不允许额外字符。
  • 点号分隔:. 匹配每个段之间的点号。
  • R" 是原始字符串字面量的前缀,用于简化包含大量转义字符的字符串书写。它避免了传统字符串中频繁使用 \ 转义符的问题,让代码更易读。

实现

获取主机MAC地址

QString HttpAPI::getHostMacAddress()
{QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表int nCnt = nets.count();QString strMacAddr = "";for(int i = 0; i < nCnt; i ++){// 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack)){strMacAddr = nets[i].hardwareAddress();break;}}return strMacAddr;
}

获取主机IP地址

QString HttpAPI::getHostIpAddress()
{QString strIpAddress;QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();// 获取第一个本主机的IPv4地址int nListSize = ipAddressesList.size();for (int i = 0; i < nListSize; ++i){if (ipAddressesList.at(i) != QHostAddress::LocalHost &&ipAddressesList.at(i).toIPv4Address()) {strIpAddress = ipAddressesList.at(i).toString();break;}}// 如果没有找到,则以本地IP地址为IPif (strIpAddress.isEmpty())strIpAddress = QHostAddress(QHostAddress::LocalHost).toString();return strIpAddress;
}

合法性判断

bool HttpAPI::isValid(const QString &ip, const int &port)
{QRegularExpression ipv4Regex(R"(^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)"R"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)");return ((port >= 0 && port <= 65535) && ipv4Regex.match(ip).hasMatch());
}

测试

对以上方法进行调用,由于都在HttpAPI类中,那直接以栈上变量方式进行调用就行,可实现进对象的自动释放:

 HttpAPI http;ui->label_mac->setText(http.getHostMacAddress());ui->label_ip->setText(http.getHostIpAddress());

值得注意的是,在HttpAPI类定义中,进行了HttpAPI::HttpAPI(QObject *parent): QObject{parent}{}的声明,这里QObject{parent}的声明,让子类构造函数显式调用了父类QObject的非默认构造函数,便于父对象在销毁时,可以同步让子对象也进行销毁,这个好处对于堆上变量创建尤其有利。因此,进行HttpAPI *http=new HttpAPI(this);使用时候,建议传入父类对象this。最终测试输出结果如下:
在这里插入图片描述

http://www.dtcms.com/wzjs/20236.html

相关文章:

  • 网站建设哪家比较专业网络营销的期末试题及答案
  • 福建建设人才与科技发展中心网站搜索引擎优化策略
  • wordpress文章不显示发布时间爱站seo工具包官网
  • wordpress卡通主题优化关键词技巧
  • 网站建设报价是多少大数据统计网站
  • 网站建设服务平台青岛网站建设公司
  • 如何建设网站教育百度指数属于行业趋势及人群
  • 优秀网站建设网页最近的新闻热点时事
  • 有关电商网站开发的参考文献seo指的是
  • 备案的时候需要网站吗排名优化公司哪家靠谱
  • 南京定制网站建设武汉大学人民医院精神科
  • 通州建设局网站太原seo快速排名怎么样
  • 哪些网站做推广性价比高亚马逊的免费网站
  • 啤酒网站建设seo推广员是做什么的
  • 手工制作方法seo快速优化技术
  • wordpress 底部导航百度工具seo
  • 小豹子韬韬是哪个网站做的手机网站建设
  • 网站建设 协议书网站制作软件免费下载
  • 北京做网做seo外链推广工具
  • 怎么在电脑上自己做网站吗营销方案包括哪些内容
  • fomo3d 网站怎么做体育新闻最新消息
  • 网站如何做中英文双语言什么叫做关键词
  • 晋州网站建设网络营销案例具体分析
  • 河北网上注册公司流程网站seo的方法
  • 课件ppt模板免费下载网站如何免费做网站
  • 政府网站建设北京市第一百度 营销推广怎么操作
  • 做百度手机网站关键词排名yandex搜索引擎
  • 用自己电脑做服务器 网站吗seo是搜索引擎营销
  • 汉阴做网站网络公司名字
  • 石家庄做网站的公司线上推广引流渠道