同时处理多个网络会话
Posted
技术标签:
【中文标题】同时处理多个网络会话【英文标题】:Working with multiple network sessions simultaneously 【发布时间】:2014-10-07 11:20:55 【问题描述】:如何使用 QtWebkit 通过两个网络接口发送请求?测试代码似乎使用相同的接口。问题是:
-
webkit 是否关心
QNetworkSession
?:
如果没有,我如何强制 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 的代码,否则这可能更容易在操作系统路由级别进行调整。
【讨论】:
以上是关于同时处理多个网络会话的主要内容,如果未能解决你的问题,请参考以下文章
python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理
iOS NSURLSession 实现网络请求-文件下载-上传-后台下载