console控制台程序监听本地服务器端口,解析http请求
using BankProcess;
using Newtonsoft.Json;
using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Threading;
namespace ConsoleApplication3
{
class Program
{
private static string configAddress = ConfigurationManager.AppSettings["ListenAddress"];
static void Main(string[] args)
{
try
{
HttpListener listerner = new HttpListener();
{
for (; true;)
{
try
{
listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证为Anonymous匿名访问
listerner.Prefixes.Add(configAddress); //指定监听端口
//eg:http://localhost/web/");
listerner.Start();
}
catch (Exception e)
{
Console.WriteLine("未能成功连接服务器.....");
listerner = new HttpListener();
continue;
}
break;
}
Console.WriteLine("服务器启动成功.......");
int maxThreadNum, portThreadNum;
//线程池
int minThreadNum;
ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
Console.WriteLine("最大线程数:{0}", maxThreadNum);
Console.WriteLine("最小空闲线程数:{0}", minThreadNum);
//ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
Console.WriteLine("\n\n等待客户连接中。。。。");
while (true)
{
//等待请求连接
//没有请求则GetContext处于阻塞状态
HttpListenerContext ctx = listerner.GetContext();
ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc), ctx);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Write("Press any key to continue . . . ");
Console.ReadKey();
}
}
static void TaskProc(object o)
{
HttpListenerContext ctx = (HttpListenerContext)o;
ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码
//也可以使用httpContext.Request.QueryString来查询请求中的参数
//eg: string userId = ctx.Request.QueryString["userId"];
string requestModel = string.Empty;
using(Stream requestStream = ctx.Request.InputStream)
{
using(StreamReader sr = new StreamReader(requestStream))
{
requestModel = sr.ReadToEnd();
}
}
// 如果请求参数有中文
//string filename = Path.GetFileName(ctx.Request.RawUrl);
//string userName = HttpUtility.ParseQueryString(filename).Get("userName"); 避免中文乱码
//使用Writer输出http响应代码
using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
{
writer.Write("response text.");
writer.Close();
ctx.Response.Close();
}
}
}
}