QTcpSocket.connectToHost() 耗时过长
QTcpSocket.connectToHost() takes too long time
这是我用于连接自定义 TcpServer 的代码。结果 connectiontoHost() 在 13.5 秒内完成(有时在 2.5 秒内)。
连接到本地服务器非常快。
与远程服务器相同的代码,但在 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 毫秒)。与putty的连接非常快。
更新
所以,我尝试使用 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
解法:
连接服务器前需要设置代理:
socket.setProxy(QNetworkProxy::NoProxy)
这是我用于连接自定义 TcpServer 的代码。结果 connectiontoHost() 在 13.5 秒内完成(有时在 2.5 秒内)。 连接到本地服务器非常快。 与远程服务器相同的代码,但在 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 毫秒)。与putty的连接非常快。
更新 所以,我尝试使用 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
解法:
连接服务器前需要设置代理:
socket.setProxy(QNetworkProxy::NoProxy)