【问题标题】:use zlib to uncompress incoming data(compressed data) from a tcp connection使用 zlib 解压缩来自 tcp 连接的传入数据(压缩数据)
【发布时间】:2015-09-02 23:15:08
【问题描述】:

我有一个客户端和一个服务器,客户端通过 tcp 向服务器发送压缩块(使用 zlib compress() 函数压缩,并且服务器没有每个块的大小)。问题是如何在服务器端解压缩这些接收到的数据?数据发送(写入)和接收(读取)是持久的,所以我不能等到客户端收到所有数据然后解压缩。

【问题讨论】:

  • 您是否开发了用于将 zlib 置于 TCP 之上的协议?如果没有,请询​​问做过的人。如果你开发了它,你怎么可能不知道?你问我们某事物是如何设计的,甚至没有告诉我们该事物是什么
  • 其他人在我正在使用的 TCP 之上开发协议,我的工作是为其添加压缩。我已经完成了压缩部分,现在我的问题是解压缩。每次我从某个 FD 调用 linux read() 函数时,返回的缓冲区可能包含块的不完整部分。那么我该如何处理呢。 @大卫施瓦茨
  • 我说的是添加压缩的协议。如果你开发了它,你应该知道它的框架是如何工作的。如果不是,您正在尝试实现一个实际上尚未设计的协议。那几乎永远不会奏效。 (如果你不知道解压是如何工作的,你怎么可能开始压缩部分?!)

标签: tcp zlib inflate compression


【解决方案1】:

为了在 TCP 之上进行压缩,您需要一些协议来执行此操作。在实现这样的协议之前,应该对其进行设计。该设计必须指定接收器将如何进行成帧,以便可以实现发送器以与该接收器设计一起工作。你需要退后一步,弄清楚整个协议是如何工作的。在开始实施之前,您绝对应该这样做。

您可以在 TCP 之上开发用于压缩的流式协议(接收方可以解压缩数据,因为整个解压缩数据块都可用,而无需显式成帧)。您可以在 TCP 之上开发用于压缩的块协议,但这需要某种实际协议来查找块的末端。您可能必须考虑何时在压缩端“推送”(或刷新)数据,具体取决于您上面的协议的详细信息。

在开始实施之前设计系统,否则你会发现在某些时候你不知道实施应该是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多