gpt4 book ai didi

C Socket,在数据流之前添加 header

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:11 24 4
gpt4 key购买 nike

我通过套接字发送字节并且工作正常。现在就传输文件而言,我需要在发送实际数据之前发送文件大小。所以我想出了一个想法,即在文件数据之前将文件大小作为 header 发送。

例如,如果文件数据是"1234",那么socket会在"1234"之前发送其长度的4个字节(也就是4),然后会有通过套接字发送 8 个字节。前4个字节为数据长度,其余字节为实际数据。

我可以通过以下方式将 int 转换为字节(即 char 数组):

bytes[0] = (n >> 24) & 0xFF;
bytes[1] = (n >> 16) & 0xFF;
bytes[2] = (n >> 8) & 0xFF;
bytes[3] = n & 0xFF;

问题是我不能在实际数据之前添加这 4 个字节:

char *data = [Actual data of file];
char *buffer = malloc(4 + strlen(data));
strcpy(buffer, bytes);
strcat(buffer, data);

这样做的结果是 bytes[] 没有了,bufferdata 有完全相同的数据

谁能帮我解决这个问题?

最佳答案

您不需要将长度字节添加到数据缓冲区中。使用单独的缓冲区。然后您可以在send() 数据缓冲区之前send() 长度缓冲区。更好的是,您可以将数据长度存储在 32 位 intuint32_t 中,使用 htonl() 将字节排列在网络字节中命令,然后 send() 直接发送,而不将其复制到它自己的缓冲区。如果您将发送逻辑包装在一个函数中,这将变得更容易管理,例如:

void sendData(void *data, uint32_t datalen)
{
uint32_t len = htonl(datalen);
send(socket, &len, sizeof(len), 0);
send(socket, data, datalen, 0);
}

char *data = [Actual data of file];
uint32_t datalen = [Actual length of file];

sendData(data, datalen);

关于C Socket,在数据流之前添加 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154074/

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