gpt4 book ai didi

C Socket - 确定数据长度

转载 作者:可可西里 更新时间:2023-11-01 02:57:05 26 4
gpt4 key购买 nike

我用 C 写了一个小的 SocketWrapper 只是为了学习,它可以工作。我正在发送一个 GET 请求并接收一个缓冲区 [1024]。但是我想读的内容往往比1024长。如何确定长度并接收整个数据?

#include <stdio.h>
#include <stdbool.h>

#include "lib/output.h"
#include "lib/network.h"

int main(int argc, char *argv[]) {
debug_verbose = true;

struct IPv4_CLIENT client;
client = socketIPv4("google.com", 80);

if(socketIPv4_connect(client) < 0) {
error("Connect failed!");
return -1;
}

char send_buffer[256];
bzero(send_buffer, 256);

printline("Send: ");
fgets(send_buffer, 255, stdin);

socketIPv4_write(client, send_buffer);

char receive_buffer[1024];
socketIPv4_read(client, receive_buffer, 1024);
hexdump(receive_buffer, 1024);

socketIPv4_close(client);

return 0;
}

最佳答案

使用 TCP/UDP 时,您无法确定要接收的数据的总长度。所以你应该在这个底层协议(protocol)上实现一个协议(protocol)来确定接收的总长度。因此,一旦您知道了大小,您就会期望并读取这些数据。

在这里,对于您的 HTTP , 该标准定义了一个名为 Content-Length 的单独 header ,用于给出 body 的总长度。但是,要读取标题,您可以接收任意数量的数据,直到您收到所有标题,然后收到给定数量的正文内容。

阅读spec理解标题、正文、分隔符..

关于C Socket - 确定数据长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490488/

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