网络编程重点

1.想要在程序中使用 Qt 网络模块,我们需要在 pro 项目配置文件里增加下面的一条语句:

QT += network

2.获取本机的网络信息
Qt 提供了 QHostInfo 和 QNetworkInterface 类用于关于本机的网络信息查询(IP地址、MAC地址、主机名)。

private:
	/*点击获取和清空文本按钮*/
	QPushButton *pushButton[2];
	/*文本浏览框用于显示本机的信息*/
	QTextBrowser *textBrowser;

/*点击获取本地信息按钮和清空文本按钮*/
pushButton[0] = new QPushButton();
pushButton[1] = new QPushButton();

pushButton[0]->setText("获取本机信息");
pushButton[1]->setText("清空文本信息");

/*按钮的大小根据文本自适应,注意setSizePolicy需要在布局中使用*/
pushButton[0]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
pushButton[1]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);

/*定时器初始化*/
timer = new QTimer();

connect(pushButton[0], SIGNAL(clicked()), this, SLOT(timerStart()));
connect(pushButton[1], SIGNAL(clicked()), this, SLOT(clearHostInfo()));
connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));

void MainWindows::timerStart()
{
	/*清空文本*/
	textBrowser->clear();
	/*定时1s*/
	timer->start(1000);
}

void MainWindows::timerTimeOut()
{
	/*显示本机信息*/
	showHostInfo();
/*停止定时器*/
timer->stop();
}

QString MainWindow::getHostInfo()
{
	/*通过QHostInfo的localHostName函数获取主机名称*/
	QString str = "主机名称:" + QHostInfo::localHostName() + "\n";
	/*获取所有的网络接口,QNetworkInterface类提供主机的IP地址和网络接口的列表*/
	QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
	/*遍历list*/
	foreach(QNetworkInterface interface, list){
		str += "网卡设备:" + interface.name() + "\n";
		str += "MAC地址:" + interface.harwareAddress() + "\n";
		/*QNetworkAddressEntry类存储IP地址子网掩码和广播地址*/
		QList<QNetworkAddressEntry> entryList = interface.addressEntrties();

		/* 遍历 entryList */
		foreach(QNetworkAddressEntry entry, entryList){
			/* 过滤 IPv6 地址,只留下 IPv4 */
			if(entry.ip().protocol()) == QAbstractSocket::IPv4Protocol {
				str += "IP地址:" + entry.ip().toString() + "\n";
				str+= "子网掩码:" + entry.netmask().toString() + "\n";
				str+= "广播地址:" + entry.broadcast().toString() + "\n\n";
			}
		}
	}
/*返回网络信息*/
return str;
}

void MainWindows::showHostInfo()
{
	/*获取本机信息后显示到textBrowser*/
	textBrowser->insertPlainText(getHostInfo());
}

void MainWindow::clearHostInfo()
{
	/* 判断 textBrowser 是否为空,如果不为空则清空文本 */
	if (!textBrowser->toPlainText().isEmpty())
		/*清空文本*/
		textBrowser->clear();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值