2014-10-07 35 views
0

如何使用QtWebkit通過兩個網絡接口發送請求?測試代碼似乎使用相同的接口。現在的問題是:同時使用多個網絡會話

  1. 是否WebKit的關心QNetworkSession
  2. 如果沒有,我怎麼能強迫的WebKit使用特定的網絡接口?

樣品的編號:

// main.cpp 
QList<QNetworkSession*> sessions; 
    QList<QNetworkConfiguration> configs = configManager.allConfigurations(QNetworkConfiguration::Active); 
    foreach (const QNetworkConfiguration& config, configs) { 
     sessions << new QNetworkSession(config); 
     qDebug() << "Preparing network session on " << config.name(); 
    } 
    foreach (QNetworkSession* session, sessions) { 
     QWebPage* page = new QWebPage(); 
     PageViewer* viewer = new PageViewer(0); 
     QObject::connect(page,SIGNAL(loadFinished(bool)),viewer,SLOT(showResults(bool))); 
     viewer->setPage(page); 
     page->setNetworkAccessManager(&accessManager); 
     session->open(); 
     qDebug() << "Internal IP reported by the interface is:\t\t" 
       << session->interface().addressEntries().at(0).ip().toString(); 
     session->waitForOpened(); 
     page->mainFrame()->load(QUrl("http://wtfismyip.com/text")); 
     session->close(); 
    } 

// page-viewer.cpp 

void PageViewer::showResults(bool results) 
{ 
    qDebug() << "External IP reported by `http://wtfismyip.com/text' is:\t" << 
    this->page->mainFrame()->toPlainText().trimmed(); 
} 

回答

1

QNetworkSession定義如果接口是可用的,但它有分組的路由上沒有影響。

QtWebKit通過QNetworkAccessManager :: get,並最終通過QTcp/SslSocket傳遞其所有的網絡連接,但我不認爲它使用QAbstractSocket :: bind可以用來定義應該使用哪個接口。

很遺憾,我會說這不能通過API來控制,除非您願意修改QNetworkAccessManager的代碼,否則這可能更容易在操作系統路由級別進行調整。