我使用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发布于 2012-09-18 16:36:29
如果服务器已将某些内容写入管道(并在顶部使用flush()ed ),则客户端只需将其从管道中读出,即可访问后续消息。如果您不想对消息做任何操作,只需在客户端使用in.skipRawData(sizeof(Measurement))即可。但是,如果您想避免客户端获取任何数据,则必须完全阻止服务器发送任何数据。所以某种类型的拥塞控制。从我的想法来看,我会让客户端发出像messageAcknowledgeReadyForNext()或notReadyToReceive()这样的信号,在clients_迭代周期中,让我们跳过那些已经发送了not ready的客户端(以及那些不知道至少发送了一个确认的客户端)。
https://stackoverflow.com/questions/12460779
复制相似问题