gpt4 book ai didi

c++ - 使用strncpy复制tcp流会导致故障吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:52:10 24 4
gpt4 key购买 nike

我正在制作一个简单的代理服务器。我很难解析响应。

// Case 1
do {
memset(buffer, 0, BUFSIZE);
con = read(sockfd, buffer, BUFSIZE);
write(client, buffer, con);
} while(con);

// Case 2
do {
memset(buffer, 0, BUFSIZE);
con = read(sockfd, buffer, BUFSIZE);
size += con;
cachebuf = (char*)realloc(cachebuf, size);
strncpy(cachebuf+(size-con), buffer, con);
} while(con);
write(client, cachebuf, size);

这两个示例从终端服务器接收 TCP 流,并将其转发给浏览器。唯一的区别是第一个在收到流后立即转发,第二个将流保存在 cachebuf 指针中并作为一个整体发送(我想使用这种情况)

它看起来是一样的,并且在接收到 HTML 文件时都工作正常。但是,第二个不能发送图像。为什么会这样?

最佳答案

您不能使用 strncpy(和 friend )来复制二进制数据。此函数复制字节,直到遇到空终止符 ('\0')。二进制数据,特别是图像,其中有很多这样的字符,字符串函数不会完全复制它。

要复制二进制数据,您可以使用memcpystd::copy

附带说明一下,read 之前的 memset 是完全没有必要的,它只会助长全局变暖,而不会做任何有用的事情。

关于c++ - 使用strncpy复制tcp流会导致故障吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50610548/

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