を読むかどうかをチェックし、私は次のような構造のメッセージを処理するTCPサーバーを持っている:のLabview - TCPバッファがより多くのデータが含まれている
[ Msg. Size (2 Byte) | Msg. Payload (N Byte) ]
次のようにプロセスは次のとおりです。
- 読みますペイロードサイズ
N
を識別するためにTCP接続から2バイト。 - ペイロードバイトである
N
を読んで、何かをしてください。 - TCP接続を閉じます。
ネットワークのオーバーヘッドを軽減するため、複数のメッセージをピギーバックしたいと思います。
[ Msg. Size #1 | Msg. Payload #1 ][ Msg. Size #2 | Msg. Payload #2 ] ...
TCPバッファを読めば明らかに処理ループは、TCP接続を閉じてはならない多くのデータが含まれている(空ではありません)。より多くのデータがTCPで提供されて確実にチェック場合
にどのような方法がありますがのLabview 2013内からのバッファを読んで?
read()
にもう一度電話をかけて、タイムアウトしているかどうかを確認できます。しかし、私は不要なレイテンシを導入するので、この解決方法を避けたいと思います。
上記の処理ループでは、標準のLabview TCP VIが使用されます(たとえば、TCP待機待機リスナー、TCP読み取り、TCP書き込み、TCPクローズ接続)。
それは永遠にブロックされます。 – EJP
いいえ、そうではありません。ゼロは、チェック・アンド・ドン・ウェイを意味します。負の1はそれを永遠にブロックします。ドキュメントから引用: "timeout msは、タイムアウトエラーを報告する前にモードが待機する時間をミリ秒単位で指定します。デフォルトは25,000msです。値-1は無限に待機することを示します。 – srm
答えは実際には正しいです。 2を「読み込むバイト」に、0を「タイムアウトms」に配線します。次に、エラークラスターのコード123(タイムアウト)を確認します。エラー123が設定されている場合、タイムアウトが発生してデータは送信されません。そうでない場合、関数は2バイトのメッセージサイズを生成します。ただし、1つのsend-callでデータを送信する場合は注意してください。そうでない場合は、2つのメッセージ間のデータだけをチェックし、「タイムアウト」を取得する可能性があります。 – PhilMasterG