httplistener异步的一个小问题
网络上找了个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);
}