Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QLocalSocket-如何删除读数_C++_Qt - Fatal编程技术网

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