找回密码
 立即注册
收起左侧

QT编写获取外网IP和检测是否通外网工具

6
回复
9384
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2015-4-14 11:18:31 显示全部楼层 |阅读模式
获取本机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://shop114595942.taobao.com/ 收藏店铺免费送各种工具源码。
百度云下载:http://pan.baidu.com/s/1ntHtxrj
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QtNetwork>

  4. Widget::Widget(QWidget *parent) :
  5.     QWidget(parent),
  6.     ui(new Ui::Widget)
  7. {
  8.     ui->setupUi(this);
  9. }

  10. Widget::~Widget()
  11. {
  12.     delete ui;
  13. }

  14. //判断IP地址及端口是否在线
  15. bool Widget::IPLive(QString ip, int port) {
  16.     QTcpSocket tcpClient;
  17.     tcpClient.abort();
  18.     tcpClient.connectToHost(ip, port);
  19.     //100毫秒没有连接上则判断不在线
  20.     return tcpClient.waitForConnected(100);
  21. }

  22. //获取网页所有源代码
  23. QString Widget::GetHtml(QString url) {
  24.     QNetworkAccessManager *manager = new QNetworkAccessManager();
  25.     QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
  26.     QByteArray responseData;
  27.     QEventLoop eventLoop;
  28.     QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
  29.     eventLoop.exec();
  30.     responseData = reply->readAll();
  31.     return QString(responseData);
  32. }

  33. //获取本机公网IP地址
  34. QString Widget::GetNetIP(QString webCode) {
  35.     QString web = webCode.replace(" ", "");
  36.     web = web.replace("\r", "");
  37.     web = web.replace("\n", "");
  38.     QStringList list = web.split("
  39. ");
  40.     QString tar = list[3];
  41.     QStringList ip = tar.split("=");
  42.     return ip[1];
  43. }

  44. void Widget::on_btnGetLocalIP_clicked()
  45. {
  46.     ui->txtLocalIP->setText(QNetworkInterface::allAddresses()[0].toString());
  47. }

  48. void Widget::on_btnGetWebIP_clicked()
  49. {
  50.     ui->txtWebIP->setText(GetNetIP(GetHtml("http://whois.pconline.com.cn/")));
  51. }

  52. void Widget::on_btnCheckWeb_clicked()
  53. {
  54.     //能接通百度IP说明可以通外网
  55.     bool ok=IPLive("202.108.22.5", 80);
  56.     ui->txtCheckWeb->setText(ok?"true":"false");
  57. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2015-4-14 22:58:15 显示全部楼层
教程内容挺好的,只不过,内容里面的淘宝店是什么,自己的店,还是给别人做广告呢?
回复 支持 反对

使用道具 举报

尚未签到

2015-4-15 17:14:58 显示全部楼层
有广告嫌疑哦
回复 支持 反对

使用道具 举报

尚未签到

2016-2-10 19:56:11 显示全部楼层
水平很高啊,值得学习
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-9-14 12:15:59 显示全部楼层
下载学习下,谢谢楼主分享~
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2019-10-9 16:25:07 显示全部楼层
谢谢楼主无私的分享,楼主好人一生平安
回复 支持 反对

使用道具 举报

尚未签到

2019-12-31 09:09:44 显示全部楼层
感谢楼主分享 正需要!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了