记录点滴(一)

            System.Uri ms = new Uri("http://www.microsoft.com/en/us/default.aspx");
            Console.WriteLine("Scheme: {0}", ms.Scheme);
            Console.WriteLine("Host: {0}", ms.Host);
            Console.WriteLine("Port: {0}", ms.Port);
            Console.WriteLine("AbsolutePath: {0}", ms.AbsolutePath);
            Console.WriteLine("Query: {0}", ms.Query);
            Console.ReadKey();
       public void Run()
       {
           // 取得本机的 loopback 网络地址,即 127.0.0.1
           IPAddress address = IPAddress.Loopback;
           // 创建可以访问的端点,49152 表示端口号
           IPEndPoint endPoint = new IPEndPoint(address, 49152);
           // 创建一个 socket,使用 IPv4 地址,传输控制协议 TCP,双向、可靠、基于连接的字节流
           Socket socket = new Socket(
               AddressFamily.InterNetwork,
               SocketType.Stream,
               ProtocolType.Tcp);
           // 将 socket 绑定到一个端点上
           socket.Bind(endPoint);
           // 设置连接队列的长度
           socket.Listen(10);
           Console.WriteLine("开始监听, 端口号:{0}.", endPoint.Port);
           while (true)
           {
               // 开始监听,这个方法会阻塞线程的执行,直到接受到一个客户端的连接请求
               Socket client = socket.Accept();
               // 输出客户端的地址
               Console.WriteLine(client.RemoteEndPoint);
               // 准备读取客户端请求的数据,读取的数据将保存在一个数组中
               byte[] buffer = new byte[4096];
               // 接受数据
               int length = client.Receive(buffer, 4096, SocketFlags.None);
               // 将请求的数据翻译为 UTF-8
               System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
               string requestString = utf8.GetString(buffer, 0, length);
               // 显示请求的内容
               Console.WriteLine(requestString);
               // 状态行
               string statusLine = "HTTP/1.1 200 OK\r\n";
               byte[] statusLineBytes = utf8.GetBytes(statusLine);
               // 准备发送到客户端的网页
               string responseBody 
                   = @"<html>
                           <head><title>From Socket Server</title></head>
                           <body><h1>Hello, world.</h1></body>
                       </html>";
               byte[] responseBodyBytes = utf8.GetBytes(responseBody);
               // 回应的头部
               string responseHeader =
                   string.Format(
                       "Content-Type: text/html; charset=UTF-8\r\nContent-Length: {0}\r\n",
                       responseBody.Length
                       );
               byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);

               // 向客户端发送状态信息
               client.Send(statusLineBytes);
               // 向客户端发送回应头
               client.Send(responseHeaderBytes);
               // 头部与内容的分隔行
               client.Send(new byte[] { 13, 10 });
               // 向客户端发送内容部分
               client.Send(responseBodyBytes);

               // 断开与客户端的连接
               client.Close();
               if (Console.KeyAvailable)
                   break;
           }
           // 关闭服务器
           socket.Close();
       }
        public void Run()
        {
            // 取得本机的 loopback 网络地址,即 127.0.0.1
            IPAddress address = IPAddress.Loopback;
            // 创建可以访问的端点,49152 表示端口号
            IPEndPoint endPoint = new IPEndPoint(address, 49152);
            // 创建 TCP 监听器
            TcpListener newserver = new TcpListener(endPoint);
            // 启动监听器
            newserver.Start();
            Console.WriteLine("开始监听...");
            while (true)
            {
                // 等待客户端连接
                TcpClient newclient = newserver.AcceptTcpClient();
                Console.WriteLine("已经建立连接!");
                // 得到一个网络流
                NetworkStream ns = newclient.GetStream();
                // 处理过程中使用 UTF-8 编码
                System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
                byte[] request = new byte[4096];
                int length = ns.Read(request, 0, 4096);
                string requestString = utf8.GetString(request, 0, length);
                Console.WriteLine(requestString);

                // 状态行
                string statusLine = "HTTP/1.1 200 OK\r\n";
                byte[] statusLineBytes = utf8.GetBytes(statusLine);
                // 准备发送到客户端的网页
                string responseBody 
                    = @"<html>
                            <head><title>From TcpListener Server</title></head>
                            <body><h1>Hello, world.</h1></body>
                        </html>";
                byte[] responseBodyBytes = utf8.GetBytes(responseBody);
                // 回应的头部
                string responseHeader =
                    string.Format(
                        "Content-Type: text/html; charset=UTF-8\r\nContent-Length: {0}\r\n",
                        responseBody.Length
                        );
                byte[] responseHeaderBytes = utf8.GetBytes(responseHeader);

                // 输出回应的状态行
                ns.Write(statusLineBytes, 0, statusLineBytes.Length);
                // 输出回应的头部
                ns.Write(responseHeaderBytes, 0, responseHeaderBytes.Length);
                // 输出回应头部与内容之间的空行
                ns.Write(new byte[] { 13, 10 }, 0, 2);
                // 输出内容部分
                ns.Write(responseBodyBytes, 0, responseBodyBytes.Length);

                // 关闭与客户端的连接
                newclient.Close();

                if (Console.KeyAvailable)
                    break;
            }
            // 关闭服务器
            newserver.Stop();
        }
     public void Run()
     {
         // 检查系统是否支持
         if (!HttpListener.IsSupported)
         {
             throw new System.InvalidOperationException(
                 "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
         }
         // 注意前缀必须以 / 正斜杠结尾
         string[] prefixes = new string[] { "http://localhost:49152/" };
         // 创建监听器.
         HttpListener listener = new HttpListener();
         // 增加监听的前缀.
         foreach (string s in prefixes)
         {
             listener.Prefixes.Add(s);
         }
         // 开始监听
         listener.Start();
         Console.WriteLine("监听中...");
         while (true)
         {
             // 注意: GetContext 方法将阻塞线程,直到请求到达
             HttpListenerContext context = listener.GetContext();
             // 取得请求对象
             HttpListenerRequest request = context.Request;
             Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl);
             Console.WriteLine("Accept: {0}", string.Join(",", request.AcceptTypes));
             Console.WriteLine("Accept-Language: {0}",
                 string.Join(",", request.UserLanguages));
             Console.WriteLine("User-Agent: {0}", request.UserAgent);
             Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]);
             Console.WriteLine("Connection: {0}",
                 request.KeepAlive ? "Keep-Alive" : "close");
             Console.WriteLine("Host: {0}", request.UserHostName);
             Console.WriteLine("Pragma: {0}", request.Headers["Pragma"]);
             // 取得回应对象
             HttpListenerResponse response = context.Response;
             // 构造回应内容
             string responseString
                 = @"<html>
             <head><title>From HttpListener Server</title></head>
             <body><h1>Hello, world.</h1></body>
         </html>";
             // 设置回应头部内容,长度,编码
             response.ContentLength64
                 = System.Text.Encoding.UTF8.GetByteCount(responseString);
             response.ContentType = "text/html; charset=UTF-8";
             // 输出回应内容
             System.IO.Stream output = response.OutputStream;
             System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
             writer.Write(responseString);
             // 必须关闭输出流
             writer.Close();

             if (Console.KeyAvailable)
                 break;
         }
         // 关闭服务器
         listener.Stop();

     }
posted @ 2011-03-08 22:01  smodi  阅读(272)  评论(0编辑  收藏  举报