QTcpSocket(客户端实现)多线程连接慢问题

20250325记录

环境

Qt5.14.2 64位 msvc编译

在多线程环境下,使用QTcpSocket实现客户端,发现在少部分电脑上,连接时间过长,定时器检查套接字状态时,发现连接处于QAbstractSocket::ConnectingState状态。

cpp 复制代码
//声明为一个类的成员对象
//使用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);

代码为上面部分,解决思路,

cpp 复制代码
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秒的切换时间(曾经在一个比较老的Pascal语言开发的程序中,发现其实现的客户端也能bind成功)

20250328

问题描述

使用Windows 的ws2_32.dll重新实现一次网络通信,发现问题依然。

问题分析

每天将生成的程序名弄成一个 新文件名,发现首次连接超不多在12秒,重复使用该程序几次后,(不是马上重起)连接速度加快。

猜测该问题原因:可能是亿赛通或其他防火墙导致。

使用C#语言实现网络通信,发现存在二次连接行为。

相关推荐
心愿许得无限大7 分钟前
Qt 常用界面组件
开发语言·c++·qt
GiraKoo22 分钟前
【GiraKoo】C++17的新特性
c++
Rockson27 分钟前
C++如何查询实时贵金属行情
c++·api
shenyan~28 分钟前
关于 c、c#、c++ 三者区别
开发语言·c++
机器视觉知识推荐、就业指导1 小时前
Qt 与Halcon联合开发八: 结合Qt与Halcon实现海康相机采图显示(附源码)
开发语言·数码相机·qt
mit6.8241 小时前
[vroom] docs | 输入与问题定义 | 任务与运输工具 | json
c++·自动驾驶
charlie1145141912 小时前
如何使用Qt创建一个浮在MainWindow上的滑动小Panel
开发语言·c++·qt·界面设计
cpp_learners4 小时前
QML与C++交互之创建自定义对象
c++·qt·qml
尘世闲鱼4 小时前
解数独(C++版本)
开发语言·c++·算法·解数独
kyle~5 小时前
C/C++字面量
java·c语言·c++