2014-02-25 75 views
1

我正在嘗試創建一個簡單的HTTP服務器以獲得學習體驗。服務器應該接收請求數據併發迴響應數據。要開始,我創建了一個Socket。不幸的是我不知道如何正確實現接收部分。作爲HTTP服務器正確接收請求數據通過套接字

我相信我不能撥打socket.Receive並始終期望所有數據成功傳輸。我將不得不使用循環來繼續流式傳輸數據。我不明白哪個條件應該停止流式傳輸數據!

檢查讀取的字節數量是否不起作用,因爲只有在連接關閉時纔會發生這種情況。我應該如何實現它?

 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); 
     } 
相關問題