当前位置: 首页 > article >正文

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

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

20250328

问题描述

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

问题分析

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

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

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


http://www.kler.cn/a/612338.html

相关文章:

  • MyBatis-Plus(Ⅲ)IService详解
  • python蓝桥杯刷题的重难点知识笔记
  • 【RHCE】LVS-NAT模式负载均衡实验
  • Flask接口开发--POST接口
  • 数据仓库 - 转转 - 一面凉经
  • 算力盒子VS边缘计算盒子
  • 脉冲编码器:精准定位与高效控制的科技先锋
  • 创建login.api.js步骤和方法
  • 【蓝桥杯】重点冲刺
  • ubuntu24.04.2 NVIDIA GeForce RTX 4060笔记本安装驱动
  • Milvus 与 Spring Boot 集成
  • SpringMVC 拦截器详解与实战
  • GAUSSDB 分布式存储机制深度解析
  • sortablejs el-table 树结构拖拽
  • PHP中yield关键字的使用
  • RestTemplate远程调用接口方式
  • 什么是视图,数据库的视图本质上就是个提前写好的sql语句,创建的一个虚拟表
  • C语言中把函数声明为inline是什么意思?
  • Nginx RTMP 处理模块 (ngx_rtmp_handler.c) 详细分析
  • Go语言分布式锁实战:dlock助力构建高并发稳定系统