測試HttpListener監聽請求----處理WebSocketRequest


測試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();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM