using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net ; using System.Threading ; using System.IO; namespace WebServer { class Webserver { HttpListener _listener; string _baseFolder; public Webserver(string uriPrefix, string baseFolder) { //限制最多只能响应50个请求 ThreadPool.SetMaxThreads(50, 1000); ThreadPool.SetMinThreads(50, 50); _listener = new HttpListener(); _listener.Prefixes.Add(uriPrefix); _baseFolder = baseFolder; } public void Start() { _listener.Start(); Console.WriteLine("Server running......"); while (true) try { //刷新一次网页,响应一次 HttpListenerContext liscontext = _listener.GetContext(); ThreadPool.QueueUserWorkItem(ProcessRequest,liscontext); Console.WriteLine("...Server running..."); } 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,this page not find"); } 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); } } } class Program { static void Main(string[] args) { var server = new Webserver("http://localhost/", @"e:/myweb"); new Thread(server.Start).Start(); //500ms睡眠,使服务器在建立连接之前有时间启动 Thread.Sleep(500); Console.WriteLine("Server running...press Enter to stop"); Console.ReadLine(); server.Stop(); } } } 测试: 在e:/myweb中放置一个网页index.html 在浏览器中输入:http://localhost/index.html。