无法使用 lwIP 原始 TCP 连接接收对 HTTP 请求的多个响应

标签 c http tcp request lwip

当我尝试将数据排入队列以发送到服务器时,我无法接收对多个 HTTP 请求的响应。

我们能够使用 tcp_write() 函数建立与服务器的连接,并立即在connected_callback() 函数内发出 HTTP 请求(与服务器建立连接后立即调用)。但是,如果我尝试使用以下语法生成两个或更多 HTTP 请求:

err_t connected_callback(void *arg, struct tcp_pcb *tpcb, err_t err) {
xil_printf("Connected to JUPITER server\n\r");

LWIP_UNUSED_ARG(arg);

/* set callback values & functions */
tcp_sent(tpcb, sent_callback);
tcp_recv(tpcb, recv_callback);
if (err == ERR_OK) {
    char* request = "GET /circuits.json HTTP/1.1\r\n"
        "Host: jupiter.info.polymtl.ca\r\n\r\n";
    (void) tcp_write(tpcb, request, 100, 1);

    request = "GET /livrable1/simulation.dee HTTP/1.1\r\n"
        "Host: jupiter.info.polymtl.ca\r\n\r\n";
    (void) tcp_write(tpcb, request, 100, 1);


    tcp_output(tpcb);

    xil_printf("tcp_write \n");


} else {
    xil_printf("Unable to connect to server");
}

return err;}

我设法将所有数据发送到服务器,但我从未收到第二个 HTTP 请求的任何数据。我设法打印第一个请求的有效负载(JSON 文件),但我从未设法接收 .dee 文件的任何内容。是否有任何具体说明可以将 HTTP 请求与 lwIP 一起排队,或者我是否遗漏了某些内容?

如果您需要更多代码来准确分析我的问题,请随时告知。

谢谢!

最佳答案

我看到的问题是您的请求 header 语句末尾有两个 \r\n 组合。

仅在 header 末尾需要 \r\n\r\n。现在,你有双倍的时间。从第一次写入中删除。

关于无法使用 lwIP 原始 TCP 连接接收对 HTTP 请求的多个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27219265/

相关文章:

php - 在 PHP 中的大请求期间防止超时

c - 通过指针的字符串(数组)容量

c - accept() 返回无效参数

python - 是否有 pycurl.FORM_FILE 的替代方法,它接受要发送的字符串或流对象?

javascript - 在获取 URL 之前了解 URL 的性质

android - 通过 TCP 套接字连接两个安卓设备

c - 用 C 语言编写一个程序来检查一个数是否可​​以被 100 整除

objective-c - 使用 LLVM 5 在 Objective-C 的结构中声明枚举

java - 检查与服务器的 TCP 连接数

sockets - 在 node.js 中保持 tcp 套接字打开