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请求的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket简介

nodejs-websocket介绍

WebSocket入门及使用指南

了解一下websocket

springboot整合websocket

从 REST 和服务器与客户端事件的角度理解 websocket