从Qt 5.7切换到Qt 5.8 - “代理类型对此操作无效”

时间:2017-02-08 18:34:18

标签: c++ qt proxy qtcpsocket qtcpserver

我正在尝试使用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环境变量被设置为避免代理本地连接。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在较旧的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);

这对我有用,在此张贴以供记录。