Exemple #1
0
        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())
            });
        }
Exemple #2
0
        //呼叫端要準備一個函數,接收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();
        }