Работа с несколькими сетевыми сессиями одновременно

Как я могу отправлять запросы через два сетевых интерфейса с помощью 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();
}

person sorush-r    schedule 07.10.2014    source источник


Ответы (1)


QNetworkSession определяет, доступен ли интерфейс, но не влияет на маршрутизацию пакетов.

QtWebKit передает все свои сетевые подключения через QNetworkAccessManager::get и, в конечном итоге, через QTcp/SslSocket, но я не думаю, что он использует QAbstractSocket::bind, который можно использовать для определения того, какой интерфейс следует использовать.

К сожалению, я бы сказал, что этим нельзя управлять через API, это может быть проще настроить на уровне маршрутизации ОС, если вы не хотите изменять код QNetworkAccessManager.

person jturcotte    schedule 12.10.2014