2014-11-30 5 views
0

서버로 보내도록 데이터를 대기열에 추가하려고하면 여러 HTTP 요청에 대한 응답을받을 수 없습니다.lwIP Raw TCP 연결을 사용하여 HTTP 요청에 대해 여러 응답을받을 수 없습니다.

우리는 서버에 연결할 수 있으며 tcp_write() 함수를 사용하여 connected_callback() 함수 (서버에 연결하자마자 호출 됨)에서 즉시 HTTP 요청을 발행 할 수 있습니다. 나는 다음과 같은 구문을 사용하여 두 개의 HTTP의 resquests 이상을 생성하려고 할 경우, :

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 파일에 대해서는 아무 것도받지 못합니다. lwIP와 함께 HTTP 요청을 대기열에 넣기위한 구체적인 지침이 있습니까?

내 문제를 정확하게 분석하려면 더 많은 코드가 필요하면 자유롭게 말하십시오.

감사합니다.

+0

귀하의 주요 문제는 아마도 귀하가 응답을받는 방법 일 것입니다. 그러나이 코드는 여기에 표시되지 않습니다. 그 외에도 첫 번째 요청을 처리 한 후 서버가 닫힐 수 있습니다. HTTP 파이프 라이닝을 사용하는 경우이 사실을 알고 누락 된 요청을 다시 시도해야합니다. –

답변

0

내가보기에 문제가 귀하의 요청 헤더 문장의 끝에 \r\n 번 조합이 있다는 것입니다.

머리말의 끝 부분에만 \r\n\r\n이 필요합니다. 자, 두 번이나. 첫 번째 쓰기에서 제거하십시오.