QLocalSocket - 如何删除读数

时间:2012-09-17 13:54:25

标签: c++ qt

我使用QLocalSocket来定期将Measurement结构从服务器程序传输到客户端。

我设置了块QDataStream然后:

out.writeRawData(data, sizeof(Measurement));
out.device()->reset();

然后为每个注册客户:

clients_.at(i)->write(block);
clients_.at(i)->flush();

然后在信号readyRead()的另一端:

in.readRawData((char *) data, sizeof(Measurement));

我想要发生的是,如果客户端在发送测量结果时没有准备好接收,它将跳过读数。 目前我得到了:

send 3
read 3
send 4
send 5
read 4

我怎样才能得到:

send 3
read 3
send 4
send 5
read 5

1 个答案:

答案 0 :(得分:0)

如果服务器已将某些内容写入管道(并在顶部flush()编辑),则客户端必须将其从管道中读出,以便能够访问后续消息。如果您不想对消息执行任何操作,只需在客户端in.skipRawData(sizeof(Measurement))即可。但是,如果您想避免客户端获取任何数据,那么您必须阻止服务器完全发送任何内容。所以某种拥塞控制。从我的头脑中,我会让客户端发出类似messageAcknowledgeReadyForNext()notReadyToReceive()的信号,并在clients_迭代周期中,让我们跳过已发送的客户端没有准备好(以及不知道发送至少一个确认的那些)。