QTcpSocket.connectToHost()需要很长时间

时间:2018-01-30 15:29:56

标签: c++ qt qtcpsocket qt5.9

这是我与自定义TcpServer连接的代码。结果connecttoHost()在13.5秒内完成(有些时间在2.5秒内)。 与localserver的连接速度非常快。 与远程服务器相同的代码,但在Qt5.7上的工作非常快。

bool cuTcpSocketIOInterface::pInitialize()
{
    QTcpSocket* tSocket = new QTcpSocket(this);
    QElapsedTimer timer;
    timer.start();
    if (!isSocketReady()){
       qDebug()<<"connectToHost" <<address()<<port()<<", Time:"
               <<timer.elapsed();
       tSocket->connectToHost(address(), port());
    }
    qDebug()<<"Done:"<<timer.elapsed();
    tSocket->waitForConnected(100);
    return tSocket->state() == QAbstractSocket::ConnectedState;
}

接下来是带有远程服务器的std :: out中此函数的输出:

connectToHost QHostAddress("192.168.255.193") 9876 , Time: 0
Done: 13581

与自定义本地服务器的连接

connectToHost QHostAddress("127.0.0.1") 9876 , Time: 0
Done: 5

Ping到我的自定义远程服务器非常好(小于1毫秒)。与腻子的联系很快。

更新 所以,我尝试使用Qt5.7和Qt 5.9.1。我获得了下一个结果: 我的代码:

#include <QCoreApplication>
#include <QDebug>
#include <QTcpSocket>
#include <QElapsedTimer>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<"START TEST!!!";
    QElapsedTimer timer;
    timer.start();

    QTcpSocket socket;
    socket.connectToHost(TcpIpAddress,80);
    qDebug()<<"connectToHost Done:"<<timer.elapsed();

    return a.exec();
}

关于Qt 5.7.1:

START TEST!!!
connectionToHost Done:7

关于Qt 5.9:

START TEST!!!
connectionToHost Done:2572

看起来像是BugReport的借口?

Qt 5.10.1上的

更新:

START TEST!!!
connectionToHost Done:2574

1 个答案:

答案 0 :(得分:0)

<强>解决方案: 在连接到服务器之前需要设置代理: socket.setProxy(QNetworkProxy::NoProxy)