2014-02-25 3 views
1

학습 경험을 위해 간단한 HTTP 서버를 만들려고합니다. 서버는 요청 데이터를 수신하고 응답 데이터를 보내야합니다. 시작하려면 Socket을 만들었습니다. 불행히도 수신 부분을 올바르게 구현하는 방법을 모르겠습니다.소켓을 통해 HTTP 서버로 요청 데이터를 올바르게 수신

저는 socket.Receive으로 전화를 걸 수 없으며 항상 모든 데이터가 성공적으로 전송되기를 기대합니다. 스트리밍 데이터를 계속하려면 루프를 사용해야합니다. 프로그램이 데이터 스트리밍을 중단해야하는 조건을 이해하지 못합니다!

읽은 바이트 수가 0인지 확인하는 것은 연결이 닫힐 때만 발생하므로 작동하지 않습니다. 어떻게 구현해야합니까?

 var listen = new TcpListener(IPAddress.Parse("127.0.0.1"), 8070); 
     listen.Start(); 
     var con = listen.AcceptSocket(); 
     listen.Stop(); 

     using (var ms = new MemoryStream()) 
     { 
      while (???) //what condition should stop the streaming? 
      { 
       var buffer = new byte[8000]; 
       int read = con.Receive(buffer); 

       ms.Write(buffer, 0, read); 
      } 
     } 

답변

0

글쎄, 내가 제대로 실패하고 추리 한 후에 어떻게하는지 알아 냈다. HTTP 스펙에서 a 또는 "\ r \ n"다음에 요청이 종료됨을 알립니다. 여기 데이터가 올바르게 수신되도록 코드를 작성했습니다.

 var listen = new TcpListener(IPAddress.Parse("127.0.0.1"), 8070); 
     listen.Start(); 
     var con = listen.AcceptSocket(); 
     listen.Stop(); 

     string input = ""; 
     while (!input.EndsWith("\r\n\r\n")) 
     { 
      var buffer = new byte[8000]; 
      int read = con.Receive(buffer); 
      input += Encoding.ASCII.GetString(buffer, 0, read); 
     } 
관련 문제