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 小时前
1930. 长度为 3 的不同回文子序列
c++
Cinema KI7 小时前
吃透C++继承:不止是代码复用,更是面向对象设计的底层思维
c++
Dream it possible!9 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试
友友马9 小时前
『QT』窗口 (一)
开发语言·数据库·qt
Bona Sun11 小时前
单片机手搓掌上游戏机(十四)—pico运行fc模拟器之电路连接
c语言·c++·单片机·游戏机
oioihoii11 小时前
性能提升11.4%!C++ Vector的reserve()方法让我大吃一惊
开发语言·c++
小狗爱吃黄桃罐头11 小时前
《C++ Primer Plus》模板类 Template 课本实验
c++
码力码力我爱你14 小时前
Harmony OS C++实战
开发语言·c++
Vect__14 小时前
别再只懂 C++98!C++11 这7个核心特性,直接拉开你与普通开发者的差距
c++
想唱rap14 小时前
C++ map和set
linux·运维·服务器·开发语言·c++·算法