当我尝试将数据排入队列以发送到服务器时,我无法接收对多个 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/