当前位置:
首页 > Python基础教程 >
-
C#教程之WebSocket
System.Net.WebSockets.WebSocket
需要.NET 4.5,IIS8以上,Windows Server2008R2自带的IIS不支持,Windows8及Server2012以上自带的IIS可以
1、实现IHttpHandler用于处理webSocket请求
using System; using System.Net.WebSockets; using System.Threading.Tasks; using System.Web; using System.Web.WebSockets; namespace WebSocketTest { public class MyWebSocketHandler : IHttpHandler { /// <summary> /// 设置实例不可以重复使用 /// </summary> public bool IsReusable { get { return false; } } /// <summary> /// 判断是否是WebSocket请求 /// 是交由handlerWebSocketAsync方法处理 /// </summary> /// <param name="context"></param> public void ProcessRequest(HttpContext context) { if (context.IsWebSocketRequest) { context.AcceptWebSocketRequest(handlerWebSocketAsync); } } private async Task handlerWebSocketAsync(AspNetWebSocketContext context) { WebSocket webSocket = context.WebSocket; await webSocket.SendMsgAsync("连接成功"); while (true) { if (webSocket.State == WebSocketState.Open) { string msg = await webSocket.ReceiveMsgAsync(); webSocket.SendMsgAsync(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @",Receive:" + msg); } } } } }
webSocket.ReceiveMsgAsync 和 webSocket.SendMsgAsync 是我自己封装的两个扩展方法,用于字符串和byte[]转换
using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace WebSocketTest { public static class WebSocketHelper { /// <summary> /// 发送消息 /// </summary> /// <param name="webSocket"></param> /// <param name="msg"></param> /// <returns></returns> public static async Task SendMsgAsync(this WebSocket webSocket, string msg) { byte[] bytesMsg = Encoding.UTF8.GetBytes(msg); ArraySegment<byte> segment = new ArraySegment<byte>(bytesMsg); await webSocket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None); } /// <summary> /// 接收消息 /// </summary> /// <param name="webSocket"></param> /// <returns></returns> public static async Task<string> ReceiveMsgAsync(this WebSocket webSocket) { ArraySegment<byte> receiveSegment = new ArraySegment<byte>(new byte[1024]); WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(receiveSegment, CancellationToken.None); string clientMsg = Encoding.UTF8.GetString(receiveSegment.Array, 0, receiveResult.Count); return clientMsg; } } }
2、在web.Config中加入自定义的handler,集成模式需要在<system.webServer>节点配置,经典模式在<system.web>节点配置
<system.web> <compilation debug="true" targetFramework="4.6.1"/> <httpRuntime targetFramework="4.5"/> <!--<httpHandlers> <add verb="*" path="*" type="WebSocketTest.MyWebSocketHandler, WebSocketTest" /> </httpHandlers>--> </system.web> <system.webServer> <handlers> <add name="webSocketHandler" verb="*" path="*" type="WebSocketTest.MyWebSocketHandler, WebSocketTest"/> </handlers> </system.webServer>
3、运行VS,进行测试
运行结果
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式