QTcpSocket类的方法connectToHost会泄露内存,

即使把调用这个方法的QTcpSocket实例delete掉,内存也不会释放!反复connectToHost会导致段错误,十分危险。必须控制connectToHost的使用次数!

1. 连接服务器

m_tcpSocket->connectToHost("127.0.0.1", 9877);

connected = m_tcpSocket->waitForConnected();

只有使用waitForConnected()后,QTcpSocket才真正尝试连接服务器,并返回是否连接的结果。

2. 写数据

m_tcpSocket->write(str.toStdString().c_str(),

strlen(str.toStdString().c_str()));

m_tcpSocket->waitForBytesWritten();

当使用waitForBytesWritten()后,QTcpSocket才真正发送数据。

m_tcpSocket->write(str1.toStdString().c_str(),

strlen(str1.toStdString().c_str()));

m_tcpSocket->write(str2.toStdString().c_str(),

strlen(str2.toStdString().c_str()));

的结果是发送了str1str2

3. 断开与服务器的连接

m_tcpSocket->disconnectFromHost()

m_tcpSocket->waitForDisconnected()

4. 善于使用QTcpSocket的SIGNAL:connected(), disconnected(),

error(QAbstractSocket::SocketError)

配合自定义私有开关变量bool connected, QTimer

可以实现自动重连接等逻辑。

其他参见:

[经验分享] QTcpSocket调试经验分享

http://www.thisisqt.com/forum/viewthread.php?tid=460

这久在写一个基于TCP的通信程序,Server端用WinCE实现,而Client端用Qt实现,之前已写了一个VC的Client端,能正确向Server发送数据。

将Client端改用Qt实现后connectToHost()后,server端已能正确accept(),但就是write()后server的read函数无法响应。调试了半天没有成功,火大呀!今天试着输出socket的状态后得到如下:

bool TcpClient::newConnect(const QString

&iAddr, quint16 iPort)

{

mSocket = newQTcpSocket(this);

mSocket->connectToHost(iAddr,iPort);

qDebug("State:%d\n",mSocket->state()); // State: 2;

2代表ConnectingState,正确的应该为3(ConnectedState)

connect(mSocket,SIGNAL(readyRead()),this,SLOT(read()));

connect(mSocket,SIGNAL(disconnected()),this,SLOT(disConnect()));return(true);

}

qint64 TcpClient::write(const QByteArray

&iData)

{

qint64len =

mSocket->write(iData);

qDebug("State:%d\n",mSocket->state()); // State: 2;

2代表ConnectingState,正确的应该为3(ConnectedState)

msleep(200);

return(len);

}

复制代码

通过输出状态,已经找到问题的所在,哎!都是业务不熟害的呀!

socket的连接是异步的,所以必须等连接建立完成才能使用,所以分别加入waitForConnected()和waitForBytesWritten()后调试通过。

bool TcpClient::newConnect(const QString

&iAddr, quint16 iPort)

{

mSocket = newQTcpSocket(this);

mSocket->connectToHost(iAddr, iPort);

qDebug("State:%d\n",mSocket->state()); // State: 2;

2代表ConnectingState,正确的应该为3(ConnectedState)

constintTimeout=5*1000;

if(!mSocket->waitForConnected(Timeout))

{

return(false);

}

qDebug("State:%d\n",mSocket>state()); // State:

3(ConnectedState)正确

connect(mSocket,SIGNAL(readyRead()),this,SLOT(read()));

connect(mSocket,SIGNAL(disconnected()),this,SLOT(disConnect()));return(true);

}

qint64 TcpClient::write(const QByteArray

&iData)

{

qint64len =

mSocket->write(iData);

mSocket->waitForBytesWritten(300);

qDebug("State:%d\n",mSocket->state()); //

State: 3(ConnectedState)正确

msleep(200);

return(len);

}

QT下用QTcpSocket传输文件,

调用了QTcpSocket:write()但是如何没有bytesWritten信号上来

http://www.myexception.cn/qt/369565.html

[提问]如何正常关闭QTcpsocket?我觉得很难协调好客户端和服务端的关闭操作

qtcpsocket断开_关于使用QTcpSocket的一些总结相关推荐

  1. qtcpsocket断开_关于QSocket的释放的一个需要注意的情况(必须先断开连接)

    最近在用QtNetwork编写服务器程序进行TCP/IP通信,大体过程如下: 1. 创建一个QTcpServer实例,监听目标IP和端口: 2. 一旦监听到有连接,获取和客户端之间的socket: 3 ...

  2. qtcpsocket断开_2020-05-06 QT子线程使用QTcpSocket连接服务器

    为什么要是用多线程? 多线程的使用主要是为了处理比较耗时的过程.多线程的实现可以通过两种方式实现 分别是:1.继承QThread实现多线程2.继承QObject实现多线程(由于继承QObject的多线 ...

  3. wifi动不动就断开_手机信号满格,但是WIFI经常掉线!我来教你怎么办

    原标题:手机信号满格,但是WIFI经常掉线!我来教你怎么办 一 WiFi信号好却掉线 大家遇到这种情况一般都是由于手机中设置了休眠模式而导致的,因为手机考虑到功耗的问题,在待机一段时间后就会断开WiF ...

  4. python如何判断tcp异常断开_如何判断TCP连接已经中断?

    用Python写网络应用是很常见的,因此一个常见的问题就是,如何在Python代码中判断TCP链接已经中断? TCP有连接,如果通讯的某一方中断的连接,另外一方在socket层面如何感知?这个问题我也 ...

  5. tcp连接多久会自动断开_苹果M1 Mac用户报告蓝牙连接问题:外设经常会断开

    IT之家 11 月 25 日消息 据外媒 AppleInsider 报道,一些新的 M1 MacBook Air.13 英寸 MacBook Pro 和 Mac mini 的用户正面临蓝牙连接问题,并 ...

  6. accept 阻塞怎么断开_暖气片放水就热不放水了就不热,怎么解决?

    暖气片使用久了,暖气片出现特殊问题就会增多了,特别是一些对暖气片内部不清洗的用户,出现特殊暖气片问题会增多.例如:暖气片一放水就热,不放水了就不热,这是怎么回事?下面跟随金旗舰旗哥一起来了解一下吧. ...

  7. ssh长时间不操作便断开_连接SSH长时间不操作断开解决办法

    经常连接ssh长时间不操作就断开,实在忍无可忍,每次都想解决这个问题,但是就是懒得搞,这次必须得一刀解决. 解决方法一:服务器配置 1. 连接SSH ssh root@192.168.0.1 复制代码 ...

  8. java如何处理tcp异常断开_(转)TCP连接异常断开检测

    TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...

  9. 共享会话怎么设置没访问自动断开_谁总结的JavaWeb会话技术了?太全面了...

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 顺便再给大家推荐一套Spring ...

  10. go 监测tcp 连接断开_优化ngrok的tcp连接

    ngrok支持tcp tunnel和http以及https,但是ngrok的tcp代理似乎优化不够好,当一段时间闲置tcp连接的话,再连接会出现连接不上的问题. 首先来看看ngrok的tcp tunn ...

最新文章

  1. 河南测绘职业学院招生计算机,河南测绘职业学院代码
  2. MySQL 性能优化技巧(一)
  3. 【帖子收藏】ansible 中的循环:with_file 和 with_fileglob
  4. 5.1 最小二乘法,左逆,投影矩阵
  5. 计算机分级时无法度量视频播放,Win7 64位系统电脑评分出现“无法度量视频播放性能”怎么解决...
  6. python没有用_你可能没有在Python3中使用但却应该使用的东西
  7. 2022十大科技趋势
  8. java ajax文字搜素,JAVA-WEB AJAX 搜索条自动提示
  9. 基于Python-turtle库绘制皮卡丘、多边形、星空
  10. FastSocket学习笔记~再说客户端与服务端的组成
  11. 10.23 第六次作业 刘惠惠 this关键字
  12. c#仿qq好友列表控件
  13. flink流处理示例开发
  14. EOS测试插件:txn_test_gen_plugin.cpp
  15. 电信资费七宗罪,终端的故事
  16. 可以真正带你理清同步阻塞与同步非阻塞与异步阻塞与异步非阻塞的文章
  17. 健壮F.T.+新裸金属重磅发布!全新升级版ZStack加速新基建!
  18. An overview of color constancy algorithms论文笔记
  19. 使您成为Windows专家的一些学习习惯
  20. 好用且必备——思维导图软件

热门文章

  1. 获取设备的sn号,mac地址以及IP地址
  2. 【游戏开发题库】使用Unity制作Unity题库,支持题目录入和刷题(面试 | 笔试 | 自制题库 | 从基础到高级)
  3. 学校固定资产管理系统由谁来做,云呐RFID固定资产管理系统
  4. 正确区分CRM、OA、协同办公平台
  5. 全球地区选择,支持中英文切换。国家-省市-城市-地区
  6. python微信加人_真的有专门给微信加人的软件吗?
  7. Ant Design介绍
  8. 蓝牙打印机CPCL编程手册~汉印HM-A300
  9. 《大数据之路-阿里巴巴大数据实践》拆书稿以及数仓架构的思考
  10. adb工具+使用adb安装apk