qt獲取網絡ip地址的類


最近在學習qt網絡編程,基於tcp和udp協議。

看了一些別人的程序和qt4自帶的例子,困擾我最大的問題就是獲取ip的類,總結起來還挺多的。

主要介紹常用的QtNetwork Module中的QHostInfo,QHostAddress,QNetworkInterface和QNetAddressEntry等類。

1。QHostInfo類獲取主機名和ip地址

(1)獲取主機名: QHostInfo::localHostName()

QString localHostName=QHostInfo::localHostName();

(2)獲取ip地址: QHostInfo info=QHostInfo::fromName(localHostName);//根據上邊獲得的主機名來獲取本機的信息

info.addresses();//QHostInfo的address函數獲取本機ip地址

如果存在多條ip地址ipv4和ipv6:

foreach(QHostAddressaddress,info.addresses())

{

if(address.protocol()==QAbstractSocket::IPv4P)//只取ipv4協議的地址

qDebug()<<address.toString();

}

如果是ipv6地址,可以使用QAbstractSocket::ipv6Protocol來實現。

QHostAddress類是管理ip地址的類,所有的ip都歸這個類管理。

(3)以主機名獲取ip

QHostInfo類可以獲取任意主機名的ip,比如獲取網站的ip地址,可以用lookupHost()函數來獲取,他是基於信號和槽的,一旦發現ip地址就會觸發槽函數。

首先定義一個槽函數:

void lookedup(const QHostInfo &host)

{

qDebug()<<host.addresses() .first().toString();//輸出了第一個 ip地址

}

QHostInfo::lookupHost("www.baidu.com" ,

this,SLOT(lookedUp(QHostInfo)));

通過查詢百度網址的ip地址,如果查找到,就會執行lookedUp()函數。

 

(4)通過ip地址獲取主機名

調用lookupHost()函數,通過輸入ip地址反向查找主機名。將上面的函數換掉。

 

2。QNetworkInterface類獲取程序運行本機的ip地址和網絡接口信息

QNetworkInterface類提供了程序所運行的主機ip地址和網絡接口信息的列表.  在一個網絡接口信息中,包含一個或多個ip地址,每一個ip地址又包含和它相關的子網掩碼和廣播地址.他們三者別封裝在一個對象中QNetworkAddressEntry,網絡接口信息也包含了硬件地址信息.

QList<QNetworkInterface>list=QNetworkInterface;:allInterfaces();//獲取所有網絡接口信息

foreach(QNetworkInterfaceinterface,list)

{

//便利每一個接口信息

qDebug<<"Device:"<<interface.name();//設備名稱

qDebug<<"HardwareAddress:"<<interface.hardwareAdderss();//獲取硬件地址

QList<QNetworkAddressEntry>entryList=interface.addressEntries();//獲取ip地址和子網掩碼和廣播地址

foreach(QNetworkAddressEntryentry,entryList)

{//便利ip條目列表

qDebug<<"IP address:"<<entry.ip().toString();//獲取ip

qDebug<<"Netmask:"<<entry.netmask().toString();//獲取子網掩碼

qDebug<<"Broadcast:"<<entry.broadcast().toString();//獲取廣播地址

}

}

 

如果只想獲取ip地址可以調用QNetworkInterface類的allAddresses()來獲取ip地址,如:

QStringaddress=QNetworkInterface::allAddresses().first().toString();

獲取所有ip地址:

QList<QHostAddress>list=QNetworkInteface::allAddresses();

{

foreach(QHostAddressaddress,list)

{

if(address.protocol()==QAbstractSocket::ipv4protocol)

qDebug<<address.toString();

}

}

 

http://blog.csdn.net/cateatapple/article/details/40824871


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM