qtcpsocket致命问题

zhenimei100 2017-09-29 04:41:04
1、qt4
2、创建一个qtcpserver,这个服务只做一件事情,有连接过来立刻close新建的连接。
3、创建一个qtcpsocket,这个客户端做两件事情:一是连接服务器,连接成功发送一条报文给服务器;二是收到disconnect信号后,会去重连。

大家可以自己去实现上面的功能。我实际测试下来得到一个结论:客户端不知道服务器已经断开了,还去发送数据,会导致程序崩溃。

请问怎么解决?
...全文
1204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
橙儿稻香 2017-10-09
  • 打赏
  • 举报
回复
抱歉 我手边没有你说的例子 网上应该很多blog都有 主要发生这个问题是我测试的时候测出的一个bug 然后给解决的 再告诉你我的思路 没有真的很抱歉
橙儿稻香 2017-10-09
  • 打赏
  • 举报
回复
兄弟 我不知道为什么你提的需求那么奇怪。。。 如果只是检验网络不通发送数据引发的崩溃没必要这么搞。。 我用的是第一种方法。。 即当连接成功触发SIGNAL(connected())信号的时候 你写个信号槽 做一个标记flag为true 在代码写之前加一个判断是否为true就好了 你阻塞不行我估计的你客户端有重连。。。然后服务器又close掉 计算机的时间比延迟的时间短太多了。。级别都不一样
zhenimei100 2017-10-09
  • 打赏
  • 举报
回复
我的邮箱是:550494597@qq.com
zhenimei100 2017-10-09
  • 打赏
  • 举报
回复
十分感谢你的回复,阻塞方式我也测试过,还是有问题的。 可能是我写的代码有问题,不知道能否传我一个简单的服务器和客户端通信的代码。
橙儿稻香 2017-09-30
  • 打赏
  • 举报
回复
这个我已经解决了。 首先是连接成功会有个connected() 信号被触发, 然后就可以写要触发的函数里面添加Write connect(this->SMUTcpSocket,SIGNAL(connected()),this,SLOT(on_conn())); //write在 on_conn()里面发送 保证网络是联通的 第二个方法是用阻塞式通信方式 就是添加一个waitForBytesWritten() 等待数据写入,如果超时了就不发送了。 waitForConnected() 等待链接的建立 waitForReadyRead() 等待新数据的到来 waitForBytesWritten() 等待数据写入socket waitForDisconnected() 等待链接断开 QTcpSocket tmpSock; char* buf ="hello"; tcpSock.connectToHost("59.64.159.87",7716); tcpSock.write(buf,strlen(buf)+1); if(tcpSock.waitforreadyread(3000)) emit SockCondition("successful"); else emit SockCondition("failed"); tcpSock.disconnect();

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧