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 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/96216.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!