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

时间:2014-11-30 22:56:26

标签: 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一起排队,或者我遗漏了什么?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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