Mega Code Archive

 
Categories / C# Tutorial / Network
 

HttpListener Demo

using System; using System.IO; using System.Net; using System.Text; using System.Threading; class WebServer {     HttpListener _listener;     string _baseFolder;          public WebServer(string uriPrefix, string baseFolder) {         System.Threading.ThreadPool.SetMaxThreads(50, 1000);         System.Threading.ThreadPool.SetMinThreads(50, 50);         _listener = new HttpListener();         _listener.Prefixes.Add(uriPrefix);         _baseFolder = baseFolder;     }     public void Start() {                                _listener.Start();         while (true)             try {                 HttpListenerContext request = _listener.GetContext();                 ThreadPool.QueueUserWorkItem(ProcessRequest, request);             } catch (HttpListenerException) { break; }               catch (InvalidOperationException) { break; }     }     public void Stop() { _listener.Stop(); }     void ProcessRequest(object listenerContext) {         try {             var context = (HttpListenerContext)listenerContext;             string filename = Path.GetFileName(context.Request.RawUrl);             string path = Path.Combine(_baseFolder, filename);             byte[] msg;             if (!File.Exists(path)) {                 context.Response.StatusCode = (int)HttpStatusCode.NotFound;                 msg = Encoding.UTF8.GetBytes("Sorry, that page does not exist");             } else {                 context.Response.StatusCode = (int)HttpStatusCode.OK;                 msg = File.ReadAllBytes(path);             }             context.Response.ContentLength64 = msg.Length;             using (Stream s = context.Response.OutputStream)                 s.Write(msg, 0, msg.Length);         } catch (Exception ex) { Console.WriteLine("Request error: " + ex); }     } }