Qt中

2012-12-12 64 views
21

獲得本地IP地址是否有一個跨平臺的方式來獲得本地IP地址使用Qt的計算機(即東西,看起來像192.168.1.49)?Qt中

我想爲Symbian手機的FTP服務器,我想顯示FTP客戶端應該連接到IP地址。

回答

32

使用QNetworkInterface::allAddresses()

foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { 
    if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) 
     qDebug() << address.toString(); 
} 
+5

+1:不幸的是,它也返回虛擬機,虛擬盒等的地址我已經當最後一個號碼ISN檢查使用的快速和骯髒的修復」 t 1(通常是逃走的IP)&& address.toString()。section(「。」, - 1,-1)!=「1」。我仍然在尋找可能性,如果發現本地IP也有標準度假。 –

12

QNetworkInterface::allAddresses()會給你的網絡地址。然後,您可以對結果進行篩選,以IPv4地址沒有回送地址:

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

for(int nIter=0; nIter<list.count(); nIter++) 

    { 
     if(!list[nIter].isLoopback()) 
      if (list[nIter].protocol() == QAbstractSocket::IPv4Protocol) 
     qDebug() << list[nIter].toString(); 

    } 
5

如果你需要的不僅僅是IP地址的詳細信息(如子網),你必須在遍歷所有的接口。

QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces(); 
QNetworkInterface eth; 

foreach(eth, allInterfaces) { 
    QList<QNetworkAddressEntry> allEntries = eth.addressEntries(); 
    QNetworkAddressEntry entry; 
    foreach (entry, allEntries) { 
     qDebug() << entry.ip().toString() << "/" << entry.netmask().toString(); 
    } 
} 
1

我想獲得eth1我的目標機器的IP地址。上面提供的答案幫助我得到我想要的東西:這就是我寫我的函數來獲取網絡接口名稱eth1的IP地址的方法。

QNetworkInterface eth1Ip = QNetworkInterface::interfaceFromName("eth1"); 
QList<QNetworkAddressEntry> entries = eth1Ip.addressEntries(); 
if (!entries.isEmpty()) { 
    QNetworkAddressEntry entry = entries.first(); 
    qDebug() << entry.ip(); 
} 
2

QNetworkInterface返回很多地址。你必須進行篩選,以獲得理想的結果:

foreach (const QNetworkInterface &netInterface, QNetworkInterface::allInterfaces()) { 
    QNetworkInterface::InterfaceFlags flags = netInterface.flags(); 
    if((bool)(flags & QNetworkInterface::IsRunning) && !(bool)(flags & QNetworkInterface::IsLoopBack)){ 
     foreach (const QNetworkAddressEntry &address, netInterface.addressEntries()) { 
      if(address.ip().protocol() == QAbstractSocket::IPv4Protocol) 
       qDebug() << address.ip().toString(); 
     } 
    } 
}