static CompactResponse ListPhoto(CompactRequest req) { StringBuilder sb = new StringBuilder(); sb.Append(@" <html> <head> <title>Index</title> <style type='text/css'>img { width: 160px; height: 120px; float: left; margin: 10px;}</style> </head> <body> "); sb.Append(""); foreach (string file in Directory.GetFiles(path, "*.png")) { sb.AppendFormat("<img src='{0}' />", Path.GetFileName(file)); } sb.Append("</body></html>"); return(new CompactResponse() { ContentType = "text/html", Data = Encoding.UTF8.GetBytes(sb.ToString()) }); }
//呼叫端要準備一個函數,接收CompactRequest,回傳CompactResponse public MicroHttpServer(int port, Func <CompactRequest, CompactResponse> reqProc) { IPAddress ipAddr = IPAddress.Parse("0.0.0.0"); listener = new TcpListener(ipAddr, port); //另建Thread執行 serverThread = new Thread(() => { listener.Start(); while (true) { Socket s = listener.AcceptSocket(); NetworkStream ns = new NetworkStream(s); if (ns.ReadByte() < 0) { return; } //解讀Request內容 StreamReader sr = new StreamReader(ns); CompactRequest req = new CompactRequest(sr); //呼叫自訂的處理邏輯,得到要回傳的Response CompactResponse resp = reqProc(req); //傳回Response StreamWriter sw = new StreamWriter(ns); sw.WriteLine("HTTP/1.1 {0}", resp.StatusText); sw.WriteLine("Content-Type: " + resp.ContentType); foreach (string k in resp.Headers.Keys) { sw.WriteLine("{0}: {1}", k, resp.Headers[k]); } sw.WriteLine("Content-Length: {0}", resp.Data.Length); sw.WriteLine(); sw.Flush(); //寫入資料本體 s.Send(resp.Data); //結束連線 s.Shutdown(SocketShutdown.Both); ns.Close(); } }); serverThread.Start(); }