博客
关于我
HttpLitener处理http请求和Websocket请求
阅读量:533 次
发布时间:2019-03-09

本文共 5148 字,大约阅读时间需要 17 分钟。

HttpListener和WebSocket在C#中的应用场景:实现请求处理与连接管理

为了构建一个能够同时处理HTTP和WebSocket请求的C#应用程序,可以遵循以下步骤进行配置和实现。本文将详细说明如何配置HttpListener以监听WebSocket消息,并展示如何在客户端和服务器端之间进行通信。

步骤1:创建新的控制台项目

首先,创建一个新的控制台项目,即TestClientWebsocket。在项目的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;

步骤2:配置服务器端 WebSocket 列表器

HttpAndWebsocket类中,实现服务器端对WebSocket连接的处理。必要的配置包括指定HTTP监听地址和端口,并设置WebSocket的响应处理逻辑。以下是核心代码:

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 + "/ "); httpListener.Start(); while (true) { try { HttpListenerContext httpListenerContext = await httpListener.GetContextAsync(); try { if (httpListenerContext.Request.IsWebSocketRequest) { ProcessRequest(httpListenerContext); } } catch (Exception) { httpListenersContext.Response.StatusCode = 400; httpListenersContext.Response.Close(); } } catch (Exception) { throw; } } } private async void ProcessRequest(HttpListenerContext listenerContext) { try { HttpListenerWebSocket 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
(returnBytes), CancellationToken.None); string ReceivesData = Encoding.UTF8.GetString(returnBytes, 0, webSocketReceiveResult.Count); ReceivesData = $"我已经收到数据:{ReceivesData}"; returnBytes = Encoding.UTF8.GetBytes(ReceivesData); await webSocket.SendAsync(new ArraySegment
(returnBytes), WebSocketMessageType.Text, true, CancellationToken.None); await Task.Delay(TimeSpan.FromSeconds(3)); } } catch (Exception) { throw; } finally { if (webSocket != null) { webSocket.Dispose(); } } }}

步骤3:配置客户端 WebSocket 连接

Program.cs文件中,实现客户端连接到WebSocket服务器的逻辑。在主函数中,创建客户端WebSocket实例,并连接到指定的WebSocket地址。以下是关键代码:

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){    HttpAndWebsocket httpAndWebsocket = new HttpAndWebsocket();    httpAndWebsocket.Start(SocketUrl);    for (int i = 0; i < 2; i++)    {        System.Threading.Tasks.Task.Factory.StartNew(BBB, i);    }    Console.WriteLine("Press ENTER to exit...");    Console.ReadLine();}public static async void BBB(object i){    string x = $"这是第{i}个。。。";    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}");    }    catch (Exception ex)    {        throw ex;    }}

步骤4:实现客户端的登录逻辑

通过设计一个异步的Login方法,实现客户端向服务器发送数据包,并接收并解析服务器的响应。以下是Login方法的实现:

public static async Task
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
(bytess), WebSocketMessageType.Text, true, new CancellationToken()); string returnValue = await GetAsyncValue(cln); return returnValue;}public static async Task
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
(buffer), CancellationToken.None); if (result.MessageType == WebSocketMessageType.Text) { returnValue = Encoding.UTF8.GetString(buffer, 0, result.Count); Console.WriteLine(returnValue); } } return returnValue;}

通过以上步骤,可以简要实现一个能够同时处理HTTP和WebSocket请求的C#应用程序。服务器端通过HttpListener监听 WebSocket 连接,并根据连接状态进行相应的数据处理和响应。客户端通过创建WebSocket实例,连接到服务器,并利用接受和发送数据的异步方法实现实时通信。

在实际应用中,可以根据具体需求进行扩展,比如添加更复杂的数据协议、请求验证机制、重建连接处理逻辑等,以满足更丰富的功能需求。

转载地址:http://fmmiz.baihongyu.com/

你可能感兴趣的文章
nodejs 开发websocket 笔记
查看>>
nodejs 的 Buffer 详解
查看>>
nodejs 读取xlsx文件内容
查看>>
nodejs 运行CMD命令
查看>>
Nodejs+Express+Mysql实现简单用户管理增删改查
查看>>
nodejs+nginx获取真实ip
查看>>
nodejs-mime类型
查看>>
NodeJs——(11)控制权转移next
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
nodejs与javascript中的aes加密
查看>>
nodejs中Express 路由统一设置缓存的小技巧
查看>>
nodejs中express的使用
查看>>
Nodejs中的fs模块的使用
查看>>
NodeJS使用淘宝npm镜像站的各种姿势
查看>>
nodejs包管理工具对比:npm、Yarn、cnpm、npx
查看>>
NodeJs单元测试之 API性能测试
查看>>
nodejs图片转换字节保存
查看>>
nodejs在Liunx上的部署生产方式-PM2
查看>>
nodejs字符与字节之间的转换
查看>>