HttpLitener处理http请求和Websocket请求的案例具体步骤如下
1、新建控制台项目TestClientWebsocket


2、选择项目右键添加类HttpAndWebsocket,代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace TestClientWebsocket
{
    public class HttpAndWebsocket
    {
        public async void Start(string url)
        {
            string url1 = "http://+:80/";
            int Port = 1234;
            HttpListener httpListener = new HttpListener();
            httpListener.Prefixes.Add("http://+:" + Port + "/");//注:其中//和:之间的+是代表本机的所有ip
            httpListener.Start();
            while (true)
            {
                try
                {
                    HttpListenerContext httpListenerContext = await httpListener.GetContextAsync();
                    try
                    {
                        if (httpListenerContext.Request.IsWebSocketRequest)
                        {
                            ProcessRequest(httpListenerContext);
                        }
                    }
                    catch (Exception)
                    {
                        httpListenerContext.Response.StatusCode = 400;
                        httpListenerContext.Response.Close();
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }        private async void ProcessRequest(HttpListenerContext listenerContext)
        {
            HttpListenerWebSocketContext httpListenerWebSocket;            try
            {
                httpListenerWebSocket = await listenerContext.AcceptWebSocketAsync(null);
            }
            catch (Exception)
            {
                listenerContext.Response.StatusCode = 500;
                listenerContext.Response.Close();
                return;
            }
            WebSocket webSocket = httpListenerWebSocket.WebSocket;
            try
            {                while (webSocket.State == WebSocketState.Open)
                {
                    byte[] returnBytes = new byte[10240];
                    WebSocketReceiveResult webSocketReceiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(returnBytes), CancellationToken.None);
                    string ReceivesData = Encoding.UTF8.GetString(returnBytes, 0, webSocketReceiveResult.Count);
                    ReceivesData = $"我已经收到数据:{ReceivesData}";
                    returnBytes = Encoding.UTF8.GetBytes(ReceivesData);
                    await webSocket.SendAsync(new ArraySegment<byte>(returnBytes), WebSocketMessageType.Text, true, CancellationToken.None);
                    await Task.Delay(TimeSpan.FromSeconds(3));
                }
            }
            catch (Exception)
            {                throw;
            }
            finally
            {
                if (webSocket != null)
                {
                    webSocket.Dispose();
                }
            }
        }    }
} 
4、控制台的Program.cs中代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace TestClientWebsocket
{
    class Program
    {
        public static string SocketUrl = "ws://127.0.0.1:1234/";
        //public static string SocketUrl = "ws://192.168.1.202:8081/ws?id=";        static void Main(string[] args)
        {//启动Websocket服务
            HttpAndWebsocket httpAndWebsocket = new HttpAndWebsocket();
            httpAndWebsocket.Start(SocketUrl);//启动ClientWebsocket客户端
            for (int i = 0; i < 2; i++)
            {                System.Threading.Tasks.Task.Factory.StartNew(BBB, i);
            }
            Console.WriteLine("Press ENTER to exit...");
            Console.ReadLine();            //string name = Console.ReadLine();
            //string no = Console.ReadLine();
            //string level = Console.ReadLine();
            //string imagestring = Console.ReadLine();
            //string returnvalue = Login(name, no, level, imagestring).Result;
            //string returnvalue = Login("22", "22", "22", "22").Result;            //for (int i = 0; i < 2; i++)
            //{
            //    //System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));            //    //System.Threading.Tasks.Task.Factory.StartNew(BBB, i);
            //    Task.Delay(2000);
            //    TestWebsocket testWebsocket = new TestWebsocket("ws://127.0.0.1:1234/", i.ToString(), "1", "1", "1");
            //    testWebsocket.showmeg = Addlog;
            //    testWebsocket.Satart();            //}
            //System.Threading.Tasks.Task.Factory.StartNew(BBB, 66);
            //Console.WriteLine($"{returnvalue}");
            //returnvalue = Login("33", "33", "33", "33").Result;
            //Console.WriteLine($"{returnvalue}");
            Console.Read();            //string returnvalue = TestWebsocket.EvaluateWithReasons().Result;
            //string returnvalue = TestWebsocket.FaceValidateWithIdCard().Result;
        }        public static async void BBB(object i)
        {
            string x = $"这是第{i}个。。。";
            //ClientWebSocket cln = new ClientWebSocket();
            //cln.ConnectAsync(new Uri(SocketUrl), new CancellationToken()).Wait();
            //byte[] bytess = Encoding.Default.GetBytes($"111");
            //cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken()).Wait();
            //string returnValue = await GetAsyncValue(cln);//异步方法
            //Console.WriteLine($"{returnValue}");
            try
            {
                ClientWebSocket cln = new ClientWebSocket();
                await cln.ConnectAsync(new Uri(SocketUrl + i.ToString()), new CancellationToken());
                string returnvalue = await Login(cln, "1", "1", "1", "1");
                Console.WriteLine($"{returnvalue}");                //string returnvalue = await TestClientWebsocket.TestWebsocket.Login("1", "1", "1", "1");
                //Console.WriteLine($"{returnvalue}");
            }
            catch (Exception ex)
            {
                throw ex;
            }        }
        public static async Task<string> Login(ClientWebSocket cln, string name, string no, string level, string imagestring)
        {
            byte[] bytess = Encoding.Default.GetBytes($"login#{name}#{no}#{level}#{imagestring}");
            await cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken());
            string returnValue = await GetAsyncValue(cln);//异步方法
            return returnValue;
        }        public static async Task<string> GetAsyncValue(ClientWebSocket clientWebSocket)
        {
            string returnValue = null;
            byte[] buffer = new byte[10240];
            WebSocketReceiveResult result = null;
            //while (clientWebSocket.State == WebSocketState.Open)
            //{
            result = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            if (result.MessageType == WebSocketMessageType.Text)
            {
                returnValue = Encoding.UTF8.GetString(buffer, 0, result.Count);
                Console.WriteLine(returnValue);
            }           
            return returnValue;
        }
    }
}
    龙腾一族至尊龙骑
    
    
    










