Labview - 检查TCP读缓冲区是否包含更多数据

时间:2016-04-06 08:37:41

标签: sockets tcp labview

我有一台处理以下结构消息的TCP服务器:

[ Msg. Size (2 Byte) | Msg. Payload (N Byte) ]

流程如下:

  1. 从TCP连接读取2个字节以标识有效负载大小N
  2. 读取N个有效负载字节并对其执行某些操作。
  3. 关闭TCP连接。
  4. 为了减少网络开销,我想搭载多条消息。

    [ Msg. Size #1 | Msg. Payload #1 ][ Msg. Size #2 | Msg. Payload #2 ] ...

    显然,如果TCP读缓冲区包含更多数据(非空),则处理循环不得关闭TCP连接。

    有没有办法可靠检查 Labview 2013 中的TCP读取缓冲区中是否有更多数据?

    我可以再次致电read()并检查它是否超时。但是我想避免这种解决方案,因为它会引入不必要的延迟。

    在上述处理循环中,使用标准Labview TCP VI(例如TCP Wait On Listener,TCP Read,TCP Write,TCP Close Connection)。

2 个答案:

答案 0 :(得分:0)

客户端一旦不希望再发送任何查询,就应该shutdown连接的发送方。服务器应该继续读取连接。如果它检测到对方已关闭发送方,则可以在发送最终答复后close建立连接。

无需等待read超时。一旦读取所有数据,就应检测半闭合连接。

如果由于某种原因您无法支持半封闭连接,则需要某种方式来指示服务器收到的数据中的最终请求。你可以用一个特殊的"我做完了#34;信息。还有其他方法。

顺便说一句,你不应该使用术语" packet"引用应用程序级消息。你应该使用术语"消息"引用代表单个请求或响应的应用程序级数据单元。

答案 1 :(得分:0)

您可以为超时时间连接零。那么你不会引入无根据的延迟。