HttpLitener处理http请求和Websocket请求
Posted 1175429393wljblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpLitener处理http请求和Websocket请求相关的知识,希望对你有一定的参考价值。
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;
以上是关于HttpLitener处理http请求和Websocket请求的主要内容,如果未能解决你的问题,请参考以下文章