3

我正在尝试使用 Qt 5.8 重新编译与 Qt 5.7 配合良好的网络应用程序。但是,使用 Qt 5.8,服务器无法listen()

int myPort = 52000; //some accessible port
QTcpServer* server = new QTcpServer();
if(!server->listen(QHostAddress::Any, myPort))
{
    qDebug() << server.errorString();
}

并且返回的错误是:

此操作的代理类型无效

我确实在受代理保护的公司网络上运行该应用程序,但是在以前的 Qt 版本中,从来不需要进行任何类型的设置来解决这个问题。我以前从未见过listen()命令失败。

Qt 5.8 中发生了什么变化或如何解释这一点的任何想法?

编辑:

在整个网络被代理的情况下,在本地域上通信不需要代理,并且设置NO_PROXY环境变量以避免代理本地连接。

4

2 回答 2

3

在 Qt 5.8 中,默认使用系统代理设置,但似乎不尊重这些NO_PROXY设置。

QNetworkProxyFactory::useSystemConfiguration(false);在创建实例之前进行设置QTcpServer修复了错误(主要是通过恢复 Qt 5.7 默认值)。

于 2017-02-14T15:02:23.947 回答
1

在不可用的旧 Qt 版本(例如 5.4.3)中,QNetworkProxyFactory::useSystemConfiguration(false);可以使用以下序列:

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy);

要不就:

QNetworkProxy proxy;
QNetworkProxy::setApplicationProxy(proxy);

这对我有用,出于记录目的在此处发布。

于 2018-06-14T14:49:54.183 回答