0

サーバープログラムから一定間隔で構造体をクライアントQLocalSocketに転送するためにa を使用しています。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
4

1 に答える 1

0

サーバーがパイプに何かを書き込んだ場合 (およびそのflush()上に ed を追加した場合)、クライアントはそれをパイプから読み取るだけで、後続のメッセージにアクセスできるようになります。メッセージに対して何もしたくない場合は、単にin.skipRawData(sizeof(Measurement))クライアント側で行うことができます。ただし、クライアントがデータを取得するのを避けたい場合は、サーバーが何も送信しないようにする必要があります。したがって、ある種の輻輳制御messageAcknowledgeReadyForNext()頭のてっぺんから、クライアントにorのような信号を送信させnotReadyToReceive()、反復サイクルで、準備ができていないことを送信したクライアント(および、少なくとも 1 つの確認応答clients_を送信したことがわかっていないもの) をスキップしましょう。

于 2012-09-18T08:36:29.320 に答える