20250325記錄
環境:Qt5.14.2 64位 msvc編譯
在多線程環境下,使用QTcpSocket實現客戶端,發現在少部分電腦上,連接時間過長,定時器檢查套接字狀態時,發現連接處于QAbstractSocket::ConnectingState狀態。
//聲明為一個類的成員對象
//使用QOBject moveToThread實現的多線程
socket = new QTcpSocket();//禁用Nagle算法,減少小數據包發送延遲
socket->setSocketOption( QAbstractionSocket::LowDelayOption ,1 );socket->setReadBufferSize( 8192 );//不使用代理
socket->setProxy(QNetworkProxy::NoProxy ) ;//明確使用IPV4地址
socket->connectToHost("192.168.1.120", port ,QIODevice::ReadWrite , QAbstractSocket::NetworkLayerProtocol::IPv4Protocal);
?代碼為上面部分,解決思路,
QNetworkConfigurationManager manager;
QNetworkConfiguration config = manager.defaultConfiguration();
config.setConnectTimeout(3000);
QSharedPointer<QNetworkSession> spNetworkSession(new QNetworkSession(config));
socket->setProperty("_q_networksession", QVariant::fromValue(spNetworkSession));
暫未能解決問題,繼續排查
不要使用bind本地地址方式,因為從bind狀態到connecting狀態,需要2秒的切換時間