Feeds:
文章
留言

Archive for 六月 15th, 2006

[C#]一個監聽 http:// 伺服器的範例

using System;
using System.Net;
using System.Threading;
using System.IO;
namespace ConsoleApplication1 {
    public class ArickServer {
        private HttpListener listener = null;
        public ArickServer() {
            // 1. 建立 http 監聽
            listener = new HttpListener();
            // 2. 處理的統一資源識別元 (URI) 前置詞
            listener.Prefixes.Add("http://+:5678/");
            // 3. 啟動伺服器
            listener.Start();
            Console.WriteLine("Start…"); 
            while (true) {
                // 4. 等待接收使用者需求
                HttpListenerContext context = listener.GetContext();
                // 5. 分派一個 Thread 處理使用者需求
                ThreadPool.QueueUserWorkItem(new WaitCallback(OnGetContext), context);
            }
        }
        // 處理使用者需求
        public void OnGetContext(object objContext) {
            try {
                HttpListenerContext context = objContext as HttpListenerContext;
                if (objContext != null) {
                    // 設定回應的內容型態
                    context.Response.ContentType = "text/html";
                    // 寫入回應資料
                    StreamWriter writer = new StreamWriter(context.Response.OutputStream);
                    writer.WriteLine("<html><body><pre>");
                    writer.WriteLine("Method:" + context.Request.HttpMethod.ToString());
                    if (context.Request.HttpMethod == "POST") {
                        StreamReader sr = new StreamReader(context.Request.InputStream);
                        writer.WriteLine("Parameter:" + sr.ReadToEnd());
                        sr.Close();
                    } else {
                        writer.WriteLine("Parameter:" + context.Request.Url.Query);
                    }
                    writer.WriteLine("</pre></body></html>");
                    writer.Flush();
                    context.Response.Close();
                }
            } catch (System.Net.HttpListenerException hlEx) {
                Console.WriteLine( string.Format("{0}rn{1}", hlEx.Message, hlEx.StackTrace) );
            }
        }
    }
    class Program {       
        static void Main(string[] args) {
            ArickServer s = new ArickServer();
        }
    }
}

Read Full Post »

今天寫了一個 Dialog,我明明就沒有呼叫 Close,可是表單卻消失了,真困惑,查了 Help 上關於 DialogResult 屬性[1]的記載才知道原來他有一些內部動作會將視窗隱藏,內容摘錄如下:
1. 設定 DialogResult 屬性的值時,不會自動呼叫 Close 方法。相反地,表單會隱藏並可再次顯示,不需建立對話方塊的新執行個體。由於這個行為,當應用程式不再需要表單時,您必須呼叫表單的 Dispose 方法。
2. 如果 Form 顯示為非強制回應 (Modeless) 視窗,DialogResult 屬性所傳回的值不可傳回指派給表單的值,因為表單的資源在表單關閉時會自動釋放。
相關參考:
[1] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/CPref17/html/P_System_Windows_Forms_Form_DialogResult.htm

Read Full Post »