C++ QLocalSocket-如何删除读数
我正在使用C++ QLocalSocket-如何删除读数,c++,qt,C++,Qt,我正在使用QLocalSocket将Measurement结构每隔一段时间从服务器程序传输到客户端 我设置块并QDataStream,然后: out.writeRawData(data, sizeof(Measurement)); out.device()->reset(); 然后,对于每个注册的客户端: clients_.at(i)->write(block); clients_.at(i)->flush(); 然后在信号的另一端readyRead(): 我希望发生的是,
QLocalSocket
将Measurement
结构每隔一段时间从服务器程序传输到客户端
我设置块并QDataStream
,然后:
out.writeRawData(data, sizeof(Measurement));
out.device()->reset();
然后,对于每个注册的客户端:
clients_.at(i)->write(block);
clients_.at(i)->flush();
然后在信号的另一端readyRead()
:
我希望发生的是,如果客户机在发送度量时没有准备好接收,它将跳过读取。
目前我得到:
send 3
read 3
send 4
send 5
read 4
我如何获得:
send 3
read 3
send 4
send 5
read 5
如果服务器已经在管道中写入了一些内容(并且
flush()
ed位于顶部),那么客户端只需从管道中读取它,就可以访问后续消息。如果您不想对消息执行任何操作,只需在客户端的.skipRawData(sizeof(Measurement))中执行。但若要避免客户端获取任何数据,则必须防止服务器发送任何数据。所以某种拥塞控制。从我的头顶开始,我会让客户端发出类似于messageacknowledgeredyfornext()
或notReadyToReceive()
的信号,在客户端
迭代周期中,让我们跳过那些发送了未准备就绪的客户端(也包括那些不知道至少发送了一次确认的客户端)。“客户端未准备就绪” ?? 这是什么意思?当向客户机写入某些内容时,您无法避免获取数据。它已经在操作系统缓冲区中,必须取出。如果数据还没有准备好,你可以忽略它,但是你不能“跳过读取”。那么我需要清除或重置什么,它是在服务器端还是在客户端?在服务器端你无能为力,你已经flush()
ed了。最简单的方法是在客户端in.skipRawData(sizeof(Measurement))
。谢谢,skipRawData()
在客户端。
send 3
read 3
send 4
send 5
read 5