qt socket 通信 接收问题

全速前行
博客专家认证
2010-07-29 01:51:46
我想写一个操作tcpsocket的类,这样用起来会很清晰吧。
遇到点问题,请教各位高手。
1、我看很多例子都是用readyRead()信号触发来接收数据,我能否不用这个事件触发而自己主动去接收呢?
我试着去做,可是第一次接收总是为“”。
QString tmp;
tmp = QString::fromLocal8Bit(tcpSocket->readAll());
服务器端用的原来c#写的程序,用的是同步socket。
我以为是因为数据没有接收到,而采用tcpSocket->waitForReadyRead(3000),
情况还是没有好转。
我之前用事件触发时,接收信息是正常的,没有问题。

2、我自己写的这个操作socket类,怎样设计才能可以使用connect呢?我是qt新手,很多东东还没太清晰,
请大侠没多指教哇!
...全文
826 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbenmajia 2010-10-17
  • 打赏
  • 举报
回复
什么叫优雅?
全速前行 2010-07-31
  • 打赏
  • 举报
回复
我设置过5000,也还是一样的,况且,用事件触发时,速度是很快的呢。

不行,我还是用事件做吧,设一个全局变量做标记,看是哪个函数发送到信息,然后在事件里再调用这个函数以继续。但是这样做,有点太不优雅了吧。。。
全速前行 2010-07-30
  • 打赏
  • 举报
回复
第二个问题算是解决了,我的类应该继承自QObject类,就可以使用信号槽了。

关于第一个问题还是没有解决方案。
因为通信时是这样规定的,
客户端发送信息后,服务器收到就回应,
客户端就应该马上接到这个回应。
所以实现时就不知道如何用事件来做,思路不太清晰。
而我用函数直接去接收信息,第一次又总是空。

请大侠们帮帮忙吧
lulovepsr 2010-07-30
  • 打赏
  • 举报
回复
是不是你在使用 tcpSocket->waitForReadyRead(3000) 等待时间短了,时间设置再长点试试呢?
全速前行 2010-07-30
  • 打赏
  • 举报
回复
问题就出现在这,
服务器端的接收是用函数做,
发送信息后,立刻调用这个接收函数,数据就会被接收,
而在qt里,我也试着这样做,第一次总是接收不到,从第二次开始才能接收到上一次的信息。

用信号槽触发那个接收函数,程序没有问题。

不知道是为什么呢
ProgrammerNO1 2010-07-30
  • 打赏
  • 举报
回复
服务器响应你知道 ,,客户端实现原理一样

16,216

社区成员

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

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