websocket在.net4.5中实现的简单demo
以下代码环境要求:win8或win10, .net4.5+IIS8
win7上是IIS7,win7上.net本身不直接支持websocket, win7可以用superwebsocket, 或自己根据协议用TCPListener实现
handler代码:
using System; using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.WebSockets;namespace websocket {/// <summary>/// Handler1 的摘要说明/// </summary>public class Handler1 : IHttpHandler{public void ProcessRequest(HttpContext context){if (context.IsWebSocketRequest){context.AcceptWebSocketRequest(ProcessChat);} }private async Task ProcessChat(AspNetWebSocketContext context){WebSocket socket = context.WebSocket;while (true) {if (socket.State == WebSocketState.Open){ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);userMsg = "你发送了:" + userMsg + "于" + DateTime.Now.ToLongTimeString();buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMsg));await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);}else{break;}}}public bool IsReusable{get{return false;}}} }
前台代码:
<head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><script src="jquery-2.0.3.min.js"></script><script>var ws;$().ready(function (){$('#conn').click(function (){ws = new WebSocket('ws://' + window.location.hostname+':'+window.location.port + '/Handler1.ashx');$('#tips').text('正在连接');ws.onopen = function (){$('#tips').text('已经连接');}ws.onmessage = function (evt){$('#tips').text(evt.data);}ws.onerror = function (evt){$('#tips').text(JSON.stringify(evt));}ws.onclose = function (){$('#tips').text('已经关闭');}});$('#close').click(function (){ws.close();});$('#send').click(function (){if (ws.readyState == WebSocket.OPEN) {ws.send($('#content').val());}else {$('#tips').text('连接已经关闭');}});});</script> </head> <body><form id="form1" runat="server"><div><input id="conn" type="button" value="连接" /><input id="close" type="button" value="关闭"/><span id="tips"></span><input id="content" type="text" /><input id="send" type="button" value="发送"/></div></form> </body>
web.config:
<system.web><httpRuntime targetFramework="4.5"/></system.web>
转载于:https://www.cnblogs.com/langu/p/3485676.html
websocket在.net4.5中实现的简单demo相关推荐
- ASP.NET4.0中客户端ID的生成
从去年某个时候,我开始探索ASP.NET4.0 Web窗体的改进.我发现ASP.NET4.0中一些令人兴奋地改进,我确认这一切都会使WEB开发更简单并为我们提供更多灵活性.因此我逐个摘选了这些 很令人 ...
- Qt WebSocket服务端的简单Demo
WebSocket服务端:QWebSocketServer 目录 WebSocket服务端:QWebSocketServer **背景**: **QWebSocketServer 简单使用介绍:** ...
- django中使用celery简单介绍
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...
- python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...
- C及C++中typedef的简单使用指南
C及C++中typedef的简单使用指南 又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也 ...
- Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测
Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)--概率预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ...
- Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)——类别预测
Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)--类别预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- codin ...
- MySQL中SELECT语句简单使用
MySQL中SELECT语句简单使用 最近开始复习mysql,查漏补缺吧. 关于mysql 1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名.表名.列名这些标识符默认是区分 ...
- python中print的用法_Python中print函数简单使用总结
Python中print函数简单使用总结 print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法. 打开电脑,选择python软件,下面选择pyth ...
最新文章
- oracle安装问题: 11g安装未填写hosts导致弹窗错误
- 《C程序设计语言》- 字符输入和输出
- Git中.gitignore文件的使用
- 错误代码#1045 Access denied for user 'root'@'localhost' (using password:YES)
- 计算机信息安全专业欧洲排名,美国大学信息安全专业排名TOP10一览 加州大学伯克利分校居首...
- android: a system image must be selected to continmue
- android顶部导航高度,Android特效——————底部/顶部导航条(Fragment+ViewPaper+XTabLayout)...
- (二)线程--通过委托异步调用方法
- 用ExpandableListView实现好友分组
- NSNotFound
- 5 table滑动固定_淮南滑动管托固定管托
- Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别---转
- Java技术栈学习路线(不喜勿喷)
- 谋定而后动,理想不相信热血
- 研究生如何写好毕业论文?(上)【中国人民大学龚新奇】
- Windows GetLastError返回值 【转】
- 阿里云不重启修改或添加密钥
- 电磁学乱七八糟的符号(一)
- web前端作业--响应式美食菜谱网页设计(HTML+CSS+JavaScript+)实现
- 北京精雕现状_北京精雕 从简单到极致的发迹史
热门文章
- Hierarchical Cluster 层次聚类
- mac 中登陆mysql忘记密码解决办法
- 【JavaScript】核心语法之数组
- jquery简单使用入门
- 《Xcode实战开发》——1.2节参与计划
- JavaScript 类型总览(图)
- 从B 树、B+ 树、B* 树谈到R 树
- 你真的了解JavaScript的比较运算符(==,!=,===,!===,=,=,,)吗?
- [浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一)
- 可侦测多种眼疾的AI 系统 对不熟悉眼科的医疗照护人员极有帮助