2013-11-01 2 views
0

C에서 웹 서버를 구현하려고합니다. 루프에서 send 명령을 사용하여 요청에 대한 응답을 보내고 있습니다. send 함수를 사용하여 루프에서 응답 보내기

buf_len = 1;  
          while (buf_len > 0)  
          { 
            buf_len = read(fh, out_buf, BUF_SIZE); 
            if (buf_len > 0)   
            { 
              send(client_s, out_buf, buf_len, 0);     
               
            } 
          } 

나는 '\0'에 의한 char out_buf[BUF_SIZE]의 마지막 문자를 종료해야합니다. 또한 동일한 코드로 png 파일을 보내려고 할 때 가끔 전체 이미지를받으며 때로는 절반 만 수신합니다. 페이지를 새로 고침하면 완전히로드됩니다. 송신 기능에 대한

+0

0으로 끝낼 필요가 없습니다. –

+0

@CharlieBurns 두 번째 파트 2에 대답 해 주시겠습니까? 페이지가 한두 번 새로 고쳐 질 때만 일부 이미지가 표시되고 이미지가 완성되는 이유는 무엇입니까? – rdp

답변

0

이 성공 man 페이지

반환 값 를 참조 이러한 호출이 전송 문자의 수를 반환한다. 에러시 -1이 반환되고 errno가 적절하게 설정됩니다.

따라서 buf_len 바이트가 전송된다는 보장이 없으므로 반환 값을 확인할 수 있습니다.

0

Hardy가 위에서 말했듯이, send는 buf_len 바이트가 전송되는 것을 보장하지 않습니다. 여러 가지 방법 중 하나는

 buf_len = 1; 
     while (buf_len > 0) { 
     buf_len = read(fh, out_buf, BUF_SIZE); 
     if(buf_len < 0) { 
      perror("read"); 
      exit(1); 
     } 
     int sent = 0; 
     int count = buf_len; 
     while(count) { 
      int n = send(client_s, out_buf + sent, count, 0); 
      count -= n; 
      sent += n; 
     } 
     } 

out_buf는 어떻게 정의됩니까?

+0

out_buf는 char 배열입니다. 나는 위에서 언급 한 방법을 시도했다. 여전히 같은 문제에 직면 해 있습니다. – rdp

+0

정확히 어떻게 정의되어 있습니까? 또한 컴파일러 경고를 무시하지 마십시오. 그 중 하나가 있습니까? –

+0

out_buf 정의 방법에 따라 "int n = send (client_s, & out_buf [sent], count, 0);" –

관련 문제