测试HttpListener监听请求,代码如下:
#region 测试HttpListenerWebSocket
/// <summary>
/// 测试HttpListener
/// </summary>
public static async void TestHttpListenerWebSocket()
{
var threadStart = new Thread(new ThreadStart(StartHttpListenerWebSocket))
{
IsBackground = true
};
threadStart.Start();
Console.WriteLine($"WebSocket开始测试数据");
int test = 1;
while (true)
{
ClientWebSocket clientWebSocket = new ClientWebSocket();
await clientWebSocket.ConnectAsync(new Uri("ws://localhost:5566"), default);
if (clientWebSocket.State == WebSocketState.Open)
{
var bytes = Encoding.UTF8.GetBytes($"客户端发---{test}");
var bufferSend = new ArraySegment<byte>(bytes);
await clientWebSocket.SendAsync(bufferSend, WebSocketMessageType.Text, true, default);
var buffer = new byte[1024];
var webSocketReceiveResult = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), default);
var result = Encoding.UTF8.GetString(buffer, 0, webSocketReceiveResult.Count);
Console.WriteLine($"客户端收---{result}");
}
test++;
Thread.Sleep(1000);
}
}
public static async void StartHttpListenerWebSocket()
{
HttpListener httpListener = new HttpListener();
//httpListener.Prefixes.Add("http://localhost:5566/");
//httpListener.Prefixes.Add("http://+:5566/");
httpListener.Prefixes.Add("http://*:5566/");
httpListener.Start();
Console.WriteLine($"httpListener 启动监听");
while (true)
{
//var asyncResult = httpListener.BeginGetContext(new AsyncCallback(CallbackWebSocket), httpListener);
//asyncResult.AsyncWaitHandle.WaitOne();
//下面也可以
//var httpListenerContext = httpListener.GetContextAsync().GetAwaiter().GetResult();
//var httpListenerContext = httpListener.GetContextAsync().Result;
var httpListenerContext = await httpListener.GetContextAsync();
//处理httpListenerContext
ProcessHttpListenerContextWebSocket(httpListenerContext);
}
}
private static async void ProcessHttpListenerContextWebSocket(HttpListenerContext httpcontent)
{
if (httpcontent.Request.IsWebSocketRequest)//处理WebSocketRequest
{
var webSocketContext = await httpcontent.AcceptWebSocketAsync(null);
var webSocket = webSocketContext.WebSocket;
var buffer = new byte[1024];
var WebSocketReceiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), default);
var result = Encoding.UTF8.GetString(buffer, 0, WebSocketReceiveResult.Count);
Console.WriteLine($"服务端 收到:{result}");
var bytes = Encoding.UTF8.GetBytes($"服务端处理:{result}");
var bufferSend = new ArraySegment<byte>(bytes);
await webSocket.SendAsync(bufferSend, WebSocketMessageType.Text, true, default);
webSocket.Dispose();
}
else //处理HttpWebRequest
{
Console.WriteLine($"HttpWebRequest 请求");
if (httpcontent.Request.HttpMethod == HttpMethod.Post.ToString())
{
Console.WriteLine($"请求方法:{httpcontent.Request.HttpMethod}");
var input = new StreamReader(httpcontent.Request.InputStream).ReadToEnd();
var bytes = Encoding.UTF8.GetBytes($"我们收到数据:{input},哈哈哈哈");
httpcontent.Response.OutputStream.Write(bytes, 0, bytes.Length);
httpcontent.Response.Close();
}
else
{
Console.WriteLine($"请求方法:{httpcontent.Request.HttpMethod}");
var bytes = Encoding.UTF8.GetBytes($"{httpcontent.Request.RawUrl}----哈哈哈哈");
httpcontent.Response.OutputStream.Write(bytes, 0, bytes.Length);
httpcontent.Response.Close();
}
}
}
private static async void CallbackWebSocket(IAsyncResult ar)
{
var httplist = (HttpListener)ar.AsyncState;
var httpcontent = httplist.EndGetContext(ar);
if (httpcontent.Request.IsWebSocketRequest)
{
var webSocketContext = await httpcontent.AcceptWebSocketAsync(null);
var webSocket = webSocketContext.WebSocket;
var buffer = new byte[1024];
await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), default);
var result = Encoding.UTF8.GetString(buffer.ToArray());
var bytes = Encoding.UTF8.GetBytes($"我们收到数据:{result},以处理");
var bufferSend = new ArraySegment<byte>(bytes);
await webSocket.SendAsync(bufferSend, WebSocketMessageType.Text, true, default);
}
}
#endregion
测试结果如下:
public class Program
{
static void Main(string[] args)
{
#region #region 测试TestHttpListener
TestHttpListenerWebSocket();
#endregion
Console.Read();
}
}