2013-04-10 64 views
2

我使用此代碼編寫作爲本地http請求服務器工作的Windows服務。Windows服務上的本地Http服務器

public void StartMe() 
    { 
     System.Net.IPAddress localAddr = System.Net.IPAddress.Parse("127.0.0.1"); 
     System.Net.Sockets.TcpListener server = new System.Net.Sockets.TcpListener(localAddr, 1234); 
     server.Start(); 
     Byte[] bytes = new Byte[1024]; 
     String data = null; 
     while (RunThread) 
     { 
      System.Net.Sockets.TcpClient client = server.AcceptTcpClient(); 
      data = null; 
      System.Net.Sockets.NetworkStream stream = client.GetStream(); 
      stream.Read(bytes, 0, bytes.Length); 
      data = System.Text.Encoding.ASCII.GetString(bytes); 

      System.IO.StreamWriter sw = new System.IO.StreamWriter("c:\\MyLog.txt", true); 
      sw.WriteLine(data); 
      sw.Close(); 

      client.Close(); 
     } 
    } 

,我有這個代碼的一些問題:所有在data字符串 首先,我得到這樣的東西后,我在我的瀏覽器http://127.0.0.1:1234/helloWorld

GET /helloWorld HTTP/1.1 
Host: 127.0.0.1:1234 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.3 

寫這篇文章的網址,我想知道我怎樣才能從這個例子中得到helloWorld。 而第二個問題是,我想服務器將給予瀏覽器的響應,它只給我關閉連接。

+0

這裏沒有任何與HTTP服務器類似的東西。它是一個監聽套接字,它接受連接並將請求寫入文件,僅此而已。如果你想自己實現一個HTTP服務器(並且相信我,你不需要),從2616開始看看各種RFC。如果你解釋你的最終目標是什麼,那麼可以選擇更好的解決方案,比如@ CSharpie的答案指向HttpListener類。更好的是,甚至可以只寫一個.aspx或MVC頁面,全部取決於你想要做什麼。 – CodeCaster 2013-04-10 17:58:29

回答

3

幾天前我問了一些類似的東西。 更好地實現HTTPListener-Class。讓生活更輕鬆。

看到這個例子: http://msdn.microsoft.com/de-de/library/system.net.httplistener%28v=vs.85%29.aspx

你的HelloWorld檢索這樣的:

HttpListenerContext context = listener.GetContext(); // Waits for incomming request 
HttpListenerRequest request = context.Request; 
string url = request.RawUrl; // This would contain "/helloworld" 

如果你想等待更多的不僅僅是一個請求要麼實現Asynchronos方式或像這樣做:

new Thread(() => 
{ 
    while(listener.IsListening) 
    { 
     handleRequest(listener.GetContext()); 
    } 

}); 
... 

void handleRequest(HttpListenerContext context) { // Do stuff here } 

這個codesample出現在我腦袋裏。它可能需要一些摸索才能很好地工作,但我希望你能明白。

+0

感謝重播,但我如何開始HTTP服務器運行? – MTA 2013-04-11 09:46:03

+0

listener.Start(); while(listener.IsListening){var ctx = listener.GetContext()} Getcontext方法然後爲每個請求返回一個contextObject。 – CSharpie 2013-04-11 09:54:22