标题:QT编写获取外网IP和检测是否通外网工具
作者:liudianwu
日期:2015-04-14 10:33
内容:
获取本机IP地址,相信初学者人人都会,最简单的方法就是QNetworkInterface::allAddresses()[0].toString(),获取网卡更详细的可以看这里:http://blog.sina.com.cn/s/blog_a6fb6cc90102v0mz.html。
如何获取外网IP,一般操作系统不自带这样的命令,需要通过特殊的网页获取,例如ip168,我这里用的是http://whois.pconline.com.cn/,通过打开网页,获取所有源代码,然后分割字符串,取出对应字符串处的本机外网IP地址即可。此方法屡试不爽,什么编程语言都可以采用此方法!
至于检测是否通外网,很多人首先想到的是检测ping命令,然后看结果,这个方法速度比较慢,我想的方法就是直接用tcp连接百度的IP地址的80端口,如果100毫秒之内可以连上说明通外网。
源码下载:
百度云下载:http://pan.baidu.com/s/1ntHtxrj
#include "widget.h"
#include "ui_widget.h"
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
//判断IP地址及端口是否在线
bool Widget::IPLive(QString ip, int port) {
QTcpSocket tcpClient;
tcpClient.abort();
tcpClient.connectToHost(ip, port);
//100毫秒没有连接上则判断不在线
return tcpClient.waitForConnected(100);
}
//获取网页所有源代码
QString Widget::GetHtml(QString url) {
QNetworkAccessManager *manager = new QNetworkAccessManager();
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
QByteArray responseData;
QEventLoop eventLoop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
eventLo ..
#1 [realfan 04-15 08:21]
赞一下!
很实用的代码
#2 [alienzj 06-09 18:35]
好!
#3 [hanheyfon 04-10 12:05]
#4 [stlcours 04-10 19:05]
貌似 bool Widget::IPLive(QString ip, int port) 这种检测方法不是很靠谱。之前我也是用这种方法,后来还是废弃了。有经验的兄弟可以给个说法吗?
#5 [caroid 05-20 21:20]
好!