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#语言实现网络通信,发现存在二次连接行为。

相关推荐
啊阿狸不会拉杆2 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路2 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
曙曙学编程3 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
△曉風殘月〆3 小时前
Visual Studio中的常用调试功能(下)
c++·ide·visual studio·调试
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习
minji...7 小时前
C++ string类(STL简介 , string类 , 访问修改字符)
开发语言·c++
Forward♞7 小时前
Qt——文件操作
开发语言·c++·qt
十五年专注C++开发7 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建
winds~8 小时前
【git】 撤销revert一次commit中的某几个文件
linux·c++
carver w8 小时前
MFC,C++,海康SDK,回调,轮询
开发语言·c++·mfc