2014-02-25 44 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); 
     } 
相关问题