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