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

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

原文地址:https://blog.csdn.net/tangchao340/article/details/146493021
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/96216.html

相关文章:

  • 基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究
  • office_word中使用宏以及DeepSeek
  • 第十六届蓝桥杯模拟二(串口通信)
  • ubuntu 22.04 一键安装 lxd
  • Linux——线程安全
  • YOLO历代发展 图像增强方式 架构
  • K8S学习之基础五十九:部署gitlab服务
  • 《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战
  • LangChain4j与DashScope深度集成实战:一站式开发指南
  • Vue 中使用 ECharts
  • 【C++游戏引擎开发】第1周《线性代数》(2):矩阵加减法与SIMD集成
  • github使用
  • JavaScript时间戳的使用
  • FFmpeg —— 实时绘制音频波形图(附源码)
  • OpenCV正确安装及环境变量配置
  • python并发爬虫
  • 元能力的养成
  • java同时使用两个不同版本的jar包,基于maven-shade-plugin,非自定义类加载器方法
  • 知识表示方法之二:产生式表示法(Production System)
  • 鸿蒙UI开发