• 3558阅读
  • 8回复

[提问]QTcp通信,怎样当接收到数据后再往下执行? [复制链接]

上一主题 下一主题
离线y1363386323
 

只看楼主 倒序阅读 楼主  发表于: 2017-03-05
关键词: QTcp通信
QTcp通信,怎样当接收到数据后再往下执行
例如:
客户端:
tcpSocket->wirite("123");  //发送的数据
qDebug()<<"A";  //往下执行

QString text=tcpSocket->read();  //接收的数据
qDebug()<<"text";

服务器端:
QString text=tcpSocket->read();  //接收的数据
tcpSocket->wirite("456");  //发送的数据

下面问题来了,我是想实现客户端发送一个数据后,当接收到数据后,再往下执行(即456-->A);
可上面的例子却是当客户端发送一个数据后,就往下执行了(即A-->456),请问怎样解决?
离线y1363386323

只看该作者 1楼 发表于: 2017-03-05
我看网上有篇资料,说用回调可以解决,但我不知道回调是什么?以及具体怎么用回调解决?
离线lxdmp

只看该作者 2楼 发表于: 2017-03-05
按你说的,客户端的QTcpSocket在构造的时候可以把readyRead连接到一个slot,在第一次发送完,服务器端有反馈的时候,信号触发到slot,就可以了啊。

还有其他需求的话,再给QTcpStocket绑个上下文,做一些状态的管理什么的就可以实现。
离线y1363386323

只看该作者 3楼 发表于: 2017-03-05
回 lxdmp 的帖子
lxdmp:按你说的,客户端的QTcpSocket在构造的时候可以把readyRead连接到一个slot,在第一次发送完,服务器端有反馈的时候,信号触发到slot,就可以了啊。
还有其他需求的话,再给QTcpStocket绑个上下文,做一些状态的管理什么的就可以实现。
 (2017-03-05 10:49) 

你说的这个我也知道,我的宗旨是想提高程序的易读性,即不把要执行的代码放在slot里面,而是放在下面去执行?
离线diezzi

只看该作者 4楼 发表于: 2017-03-05
不是应该做个死循环检测判断吗?然后再跳出向下执行?
离线never_forget

只看该作者 5楼 发表于: 2017-03-06
这个 数据接收是异步的,你不做信号处理就不知道什么时候来继续执行,所以,应该没有其他办法,楼主大大!
离线y1363386323

只看该作者 6楼 发表于: 2017-03-13
回 diezzi 的帖子
diezzi:不是应该做个死循环检测判断吗?然后再跳出向下执行? (2017-03-05 21:06) 

死循环会占用CPU的,我还是用的老办法解决的
离线y1363386323

只看该作者 7楼 发表于: 2017-03-13
回 never_forget 的帖子
never_forget:这个 数据接收是异步的,你不做信号处理就不知道什么时候来继续执行,所以,应该没有其他办法,楼主大大! (2017-03-06 20:24) 

你说的很对,新办法我想了好久都没想出来,我还是用的你所指的老办法
离线linch2008

只看该作者 8楼 发表于: 2017-03-22
新链接过来的时候,可以存储socket。
QTcpSocket *socket = tcpServer->nextPendingConnection();

定义一个槽,收到东西的话就跑到槽函数中,就可以啦
connect(socket, SIGNAL(readyRead()), this, SLOT(readMessageSlot()) );

别用死循环
快速回复
限100 字节
 
上一个 下一个