0

我正在使用 aQLocalSocketMeasurement结构从服务器程序每隔一段时间传输到客户端。

我设置了块,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
4

1 回答 1

0

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

于 2012-09-18T08:36:29.320 回答