网络上找了个httplistener异步的例子
http://blogread.cn/it/article.php?id=291可以运行,但有个小问题,就是每次访问时,接收程序会运行2次,这个很奇怪
就是后面代码中HandleRequest方法里的Console.WriteLine("good");会输出2次,这个有办法解决吗付代码:
static void EndGetRequest(IAsyncResult result)
{
HttpListenerContext context = null;
System.Net.HttpListener listener = (System.Net.HttpListener)result.AsyncState; try
{
context = listener.EndGetContext(result);
HandleRequest(context);
}
catch (Exception ex)
{
Console.Write("Exception in listener: {0}{1}", Environment.NewLine, ex);
}
finally
{
if (context != null)
context.Response.Close(); if (listener.IsListening)
listener.BeginGetContext(EndGetRequest, listener);
}
} static void HandleRequest(HttpListenerContext context)
{
bool isScrape = context.Request.RawUrl.StartsWith("/scrape", StringComparison.OrdinalIgnoreCase); string responseStr = "very nice! haha"n来个中文你支持吗?"n";
for (int i = 0; i < context.Request.QueryString.Count; i++)
{ responseStr = responseStr + "query:" + context.Request.QueryString.Keys[i] + "=" + context.Request.QueryString[i] + ""n";
}
Console.WriteLine("good"); byte[] response = System.Text.Encoding.Default.GetBytes(responseStr);
context.Response.ContentType = "text/plain"; //这里的类型随便你写.如果想返回HTML格式使用text/html
context.Response.StatusCode = 200;
context.Response.ContentLength64 = response.LongLength;
context.Response.OutputStream.Write(response, 0, response.Length);
}
http://blogread.cn/it/article.php?id=291可以运行,但有个小问题,就是每次访问时,接收程序会运行2次,这个很奇怪
就是后面代码中HandleRequest方法里的Console.WriteLine("good");会输出2次,这个有办法解决吗付代码:
static void EndGetRequest(IAsyncResult result)
{
HttpListenerContext context = null;
System.Net.HttpListener listener = (System.Net.HttpListener)result.AsyncState; try
{
context = listener.EndGetContext(result);
HandleRequest(context);
}
catch (Exception ex)
{
Console.Write("Exception in listener: {0}{1}", Environment.NewLine, ex);
}
finally
{
if (context != null)
context.Response.Close(); if (listener.IsListening)
listener.BeginGetContext(EndGetRequest, listener);
}
} static void HandleRequest(HttpListenerContext context)
{
bool isScrape = context.Request.RawUrl.StartsWith("/scrape", StringComparison.OrdinalIgnoreCase); string responseStr = "very nice! haha"n来个中文你支持吗?"n";
for (int i = 0; i < context.Request.QueryString.Count; i++)
{ responseStr = responseStr + "query:" + context.Request.QueryString.Keys[i] + "=" + context.Request.QueryString[i] + ""n";
}
Console.WriteLine("good"); byte[] response = System.Text.Encoding.Default.GetBytes(responseStr);
context.Response.ContentType = "text/plain"; //这里的类型随便你写.如果想返回HTML格式使用text/html
context.Response.StatusCode = 200;
context.Response.ContentLength64 = response.LongLength;
context.Response.OutputStream.Write(response, 0, response.Length);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货