同时使用多个网络会话

时间:2014-10-07 11:20:56

标签: qt networking qtwebkit qnetworkaccessmanager

如何使用QtWebkit通过两个网络接口发送请求?测试代码似乎使用相同的界面。问题是:

  1. webkit是否关心QNetworkSession?:
  2. 如果没有,我如何强制webkit使用特定的网络接口?
  3. 示例代码:

    // 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 个答案:

答案 0 :(得分:1)

QNetworkSession定义接口是否可用,但它对数据包的路由没有影响。

QtWebKit通过QNetworkAccessManager :: get传递其所有网络连接,最终通过QTcp / SslSocket,但我不认为它使用QAbstractSocket :: bind,可以用来定义应该使用哪个接口。 / p>

很遗憾,我说这不能通过API进行控制,这可能更容易在操作系统路由级别进行调整,除非您愿意修改QNetworkAccessManager&#39 ; s代码。