【问题标题】:Working with multiple network sessions simultaneously同时处理多个网络会话
【发布时间】:2014-10-07 11:20:55
【问题描述】:

如何使用 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();
}

【问题讨论】:

    标签: qt networking qtwebkit qnetworkaccessmanager


    【解决方案1】:

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

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

    很遗憾,我想说这无法通过 API 进行控制,除非您愿意修改 QNetworkAccessManager 的代码,否则这可能更容易在操作系统路由级别进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2017-11-29
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多