以下代码环境要求: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相关推荐

  1. ASP.NET4.0中客户端ID的生成

    从去年某个时候,我开始探索ASP.NET4.0 Web窗体的改进.我发现ASP.NET4.0中一些令人兴奋地改进,我确认这一切都会使WEB开发更简单并为我们提供更多灵活性.因此我逐个摘选了这些 很令人 ...

  2. Qt WebSocket服务端的简单Demo

    WebSocket服务端:QWebSocketServer 目录 WebSocket服务端:QWebSocketServer **背景**: **QWebSocketServer 简单使用介绍:** ...

  3. django中使用celery简单介绍

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...

  4. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  5. C及C++中typedef的简单使用指南

    C及C++中typedef的简单使用指南 又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也 ...

  6. Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测

    Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)--概率预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ...

  7. Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)——类别预测

    Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)--类别预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- codin ...

  8. MySQL中SELECT语句简单使用

    MySQL中SELECT语句简单使用 最近开始复习mysql,查漏补缺吧. 关于mysql 1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名.表名.列名这些标识符默认是区分 ...

  9. python中print的用法_Python中print函数简单使用总结

    Python中print函数简单使用总结 print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法. 打开电脑,选择python软件,下面选择pyth ...

最新文章

  1. oracle安装问题: 11g安装未填写hosts导致弹窗错误
  2. 《C程序设计语言》- 字符输入和输出
  3. Git中.gitignore文件的使用
  4. 错误代码#1045 Access denied for user 'root'@'localhost' (using password:YES)
  5. 计算机信息安全专业欧洲排名,美国大学信息安全专业排名TOP10一览 加州大学伯克利分校居首...
  6. android: a system image must be selected to continmue
  7. android顶部导航高度,Android特效——————底部/顶部导航条(Fragment+ViewPaper+XTabLayout)...
  8. (二)线程--通过委托异步调用方法
  9. 用ExpandableListView实现好友分组
  10. NSNotFound
  11. 5 table滑动固定_淮南滑动管托固定管托
  12. Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别---转
  13. Java技术栈学习路线(不喜勿喷)
  14. 谋定而后动,理想不相信热血
  15. 研究生如何写好毕业论文?(上)【中国人民大学龚新奇】
  16. Windows GetLastError返回值 【转】
  17. 阿里云不重启修改或添加密钥
  18. 电磁学乱七八糟的符号(一)
  19. web前端作业--响应式美食菜谱网页设计(HTML+CSS+JavaScript+)实现
  20. 北京精雕现状_北京精雕 从简单到极致的发迹史

热门文章

  1. Hierarchical Cluster 层次聚类
  2. mac 中登陆mysql忘记密码解决办法
  3. 【JavaScript】核心语法之数组
  4. jquery简单使用入门
  5. 《Xcode实战开发》——1.2节参与计划
  6. JavaScript 类型总览(图)
  7. 从B 树、B+ 树、B* 树谈到R 树
  8. 你真的了解JavaScript的比较运算符(==,!=,===,!===,=,=,,)吗?
  9. [浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一)
  10. 可侦测多种眼疾的AI 系统 对不熟悉眼科的医疗照护人员极有帮助