Qt中提供了幾個用於獲取主機網絡信息的類,包括QHostInfo、QHostAddress、QNetworkInterface以及QNetworkAddress.在本節中,我將在這里總結QHostInfo類的用法,其他的類的介紹將會在后續文章中給出。
注:更詳細的內容,請參看官方文檔。
QHostInfo類提供了一系列用於主機名查詢的靜態函數。
QHostInfo類利用操作系統所提供的查詢機制來查詢與特定主機名相關聯的主機的IP地址,或者與一個IP地址相關聯的主機名。這個類提供了兩個靜態的便利函數:一個工作在異步方式下,並且一旦找到主機就發射一個信號;另一個以阻塞方式工作,並且最終返回一個QHostInfo對象。
要使用異步方式查詢主機的IP地址,則調用lookupHost(),它需要傳遞3個參數,依次是主機名或IP地址、接收對象和接收槽函數,並且返回一個查詢ID。你可以通過調用以查詢ID為參數的abortHostLookup()方法的來中止查詢。
當得到查詢結果后就會調用此槽函數。查詢結果被存儲到一個QHostInfo對象中。可以通過調用addresses()方法來獲得主機的IP地址列表,同時可以通過調用hostName()方法來獲得查詢的主機名。
如果查詢失敗,error()返回發生錯誤的類型。errorString()給出一個人們能夠讀懂的查詢錯誤描述。
1 #include "mainwindow.h" 2 #include <QDebug> 3 4 5 MainWindow::MainWindow(QWidget *parent) 6 : QMainWindow(parent) 7 { 8 QHostInfo::lookupHost("www.baidu.com", 9 this, SLOT(printResult(QHostInfo))); 10 } 11 void MainWindow::printResult(QHostInfo result) 12 { 13 qDebug() << result.hostName(); 14 QList<QHostAddress> addrList = result.addresses(); 15 if (!addrList.isEmpty()) 16 { 17 for (int i = 0; i < addrList.size(); i++) 18 { 19 qDebug() << addrList.at(i); 20 } 21 } 22 }
如果你想要使用阻塞方式查詢,則使用QHostInfo::fromName()函數。查詢給定主機名對應的IP地址。此函數在查詢期間將阻塞,這意味着程序執行期間將掛起直到返回查詢結果。返回的查詢結果存儲在一個QHostInfo對象中。
如果你傳遞一個字面IP地址給name來替代主機名,QHostInfo將搜索這個IP地址對應的域名 (ie. QHostInfo將執行一個反向查詢)。如果成功,則返回的QHostInfo對象中將包含對應主機名的域名和IP地址。
1 #include "mainwindow.h" 2 #include <QDebug> 3 4 5 MainWindow::MainWindow(QWidget *parent) 6 : QMainWindow(parent) 7 { 8 QHostInfo info = QHostInfo::fromName("www.baidu.com"); 9 qDebug() << info.addresses(); 10 }
參考資料:《獲取網絡接口信息》-MyNote
《Qt網絡之獲取本機網絡信息》-51CTO