C#模拟web服务器

今天查了下System.Net. HttpListener类,发现这个可以做一个简易的模拟服务器,与hosts文件一起使用,可以拦截或处理其他向外的请求,如某个软件需要联网检查软件版权。把源码粘上,方便以后使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace CodeTest {
    class Program {
        static void Main(string[] args) {
            using(HttpListener listerner = new HttpListener()) {

                //添加监听地址,可以添加多个
                listerner.Prefixes.Add("http://127.0.0.1:8088/web/");
                listerner.Prefixes.Add("http://192.168.1.99:8088/web/");

                listerner.Start();
                Console.WriteLine("web服务器已启动..");
                bool isListerner = true;//服务锁
                int count = 0;//客户段请求数量
                while(isListerner) {
                    //等待请求连接 没有请求则GetContext处于阻塞状态
                    HttpListenerContext ctx = listerner.GetContext();
                    Console.WriteLine("第" + (++count) + "次请求.");

                    ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码

                    string name = ctx.Request.QueryString["name"];//客户端查询参数
                    if(name != null) {
                        Console.WriteLine(name);
                    }


                    //使用Writer输出http响应代码
                    using(StreamWriter writer = new StreamWriter(ctx.Response.OutputStream)) {
                        writer.WriteLine("");
                        writer.WriteLine(" ");
                        writer.WriteLine("  ");
                        writer.WriteLine("  c# web服务器");
                        writer.WriteLine("");

                        writer.WriteLine("");
                        writer.WriteLine("  服务器响应:
"); writer.WriteLine(" 请求信息:
"); //将请求头信息输出 foreach(string header in ctx.Request.Headers.Keys) { writer.WriteLine(" {0}={1}
",header,ctx.Request.Headers[header]); } writer.WriteLine(""); writer.WriteLine(""); writer.Close();//关闭输出流 ctx.Response.Close(); } } listerner.Stop(); Console.WriteLine("web服务器已关闭.."); } } } }

测试路径:

http://127.0.0.1:8088/web/?name=xxx


你可能感兴趣的:(C#)