gpt4 book ai didi

c++ - zlib 的 uncompress() 奇怪地返回 Z_BUF_ERROR

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:15 31 4
gpt4 key购买 nike

我正在编写基于 Qt 的客户端应用程序。它使用 QTcpSocket 连接到远程服务器。在发送任何实际数据之前,它需要发送登录信息,这是 zlib 压缩的 json。

据我从服务器源知道的那样,为了使一切正常,我需要在 4 个字节长度的未压缩数据之后发送 X 个字节的压缩数据。

在服务器端解压是这样的:

/* look at first 32 bits of buffer, which contains uncompressed len */
unc_len = le32toh(*((uint32_t *)buf));
if (unc_len > CLI_MAX_MSG)
return NULL;

/* alloc buffer for uncompressed data */
obj_unc = malloc(unc_len + 1);
if (!obj_unc)
return NULL;

/* decompress buffer (excluding first 32 bits) */
comp_p = buf + 4;
if (uncompress(obj_unc, &dest_len, comp_p, buflen - 4) != Z_OK)
goto out;
if (dest_len != unc_len)
goto out;
memcpy(obj_unc + unc_len, &zero, 1); /* null terminate */

我正在使用 Qt 内置的 zlib 压缩 json(我刚刚下载了 header 并将其放在 mingw 的 include 文件夹中):

char json[] = "{\"version\":1,\"user\":\"test\"}";
char pass[] = "test";

std::auto_ptr<Bytef> message(new Bytef[ // allocate memory for:
sizeof(ubbp_header) // + msg header
+ sizeof(uLongf) // + uncompressed data size
+ strlen(json) // + compressed data itself
+ 64 // + reserve (if compressed size > uncompressed size)
+ SHA256_DIGEST_LENGTH]);//+ SHA256 digest

uLongf unc_len = strlen(json);
uLongf enc_len = strlen(json) + 64;

// header goes first, so server will determine that we want to login
Bytef* pHdr = message.get();

// after that: uncompressed data length and data itself
Bytef* pLen = pHdr + sizeof(ubbp_header);
Bytef* pDat = pLen + sizeof(uLongf);

// hash of compressed message updated with user pass
Bytef* pSha;

if (Z_OK != compress(pLen, &enc_len, (Bytef*)json, unc_len))
{
qDebug("Compression failed.");
return false;
}

完整功能代码在这里:http://pastebin.com/hMY2C4n5

即使服务器正确接收到未压缩的长度,uncompress() 也会返回 Z_BUF_ERROR

P.S.:我实际上是在编写 pushpool 的客户端来弄清楚它的二进制协议(protocol)是如何工作的。我在官方比特币论坛上问过这个问题,但没有运气。 http://forum.bitcoin.org/index.php?topic=24257.0

最佳答案

原来这是服务器端错误。比特币论坛线程中的更多详细信息。

关于c++ - zlib 的 uncompress() 奇怪地返回 Z_BUF_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527583/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com