一 介绍

WebSocket# 提供了实现WebSocket协议客户端和服务器。

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端

二 用法

创建一个控制台程序,从Nuget添加引用websocket-sharp

public static void Main (string[] args)
{
var wssv=new WebSocketServer(null, );//创建一个websocket服务对象,2018是端口号
wssv.start();//开始接收websocket
Console.ReadKey (true);
wssv.Stop ();//关闭
}

如果需要使用wss(比如微信小程序中,只接受wss不接受ws,)

则在创建websocket服务对象的第三个参数中加入如下代码

  var ssl = new ServerSslConfiguration(new X509Certificate2
(@"D:证书\132456.pfx", ""), false,
System.Security.Authentication.SslProtocols.Tls11);
var wssv = new WebSocketServer(null, , ssl);

接着创建一个类继承WebSocketBehavior

public class ChatRoom : WebSocketBehavior
{
protected override async Task OnMessage(MessageEventArgs e)
{
//传来的消息
var memid = Context.GetQueryString().Result["memid"];//通过此方法可以获取传来的查询字符串值
memberEntity = new tb_memberEntity();//会员实体类,此处会意即可,不贴具体代码
if (!memid.IsEmpty())
{
memberEntity = new tb_memberBLL().GetEntity(memid);
}
else
{
memberEntity.nickname = "游客";
}
StreamReader reader = new StreamReader(e.Data, Encoding.UTF8);//读取发来的数据内容
var msgStr = reader.ReadToEnd();
await Sessions.Broadcast(new
{
content = msgStr,
name = memberEntity.nickname,
}.ToJson()); //将准备好的内容发送给“收听”的客户端
}
protected override async Task OnClose(CloseEventArgs e)
{
//处理关闭连接的响应
} protected override async Task OnOpen()
{
//处理打开连接的响应
} protected override async Task OnError(WebSocketSharp.ErrorEventArgs e)
{
//处理异常事件
Console.WriteLine(e.Message + "\t\r" + DateTime.Now);
}
}

回到刚刚的mian方法中,在wssv.Start();后插入如下代码,相当于创建了一个聊天间

wssv.AddWebSocketService<ChatRoom >("roomName");

写完收工,接着F5运行一下

三 测试

此处我通过html来实现客户端

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="messages">
</div>
<input type="text" id="content" value="" />
<a id="sendbt" href="javascript:void(0);">发送</a>
</body> <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
<script>
var ws;
function initWS() {
if ("WebSocket" in window) {
ws = new WebSocket("ws://localhost:2018/roomName");
ws.onopen = function (e) {
console.log("Openened connection to websocket");
};
ws.onclose = function () {
console.log("Close connection to websocket");
// 断线重连
initWS();
}
ws.onerror = function (e) {
console.info("出错了");
console.info(e);
}
ws.onmessage = function (e) {
console.log("收到", e.data)
$("#messages").append(e.data);
}
} else {
alert("您的浏览器不支持 WebSocket!");
}
}
initWS();
function sendMsg(msg, type) {
var sendJosn = JSON.stringify({ Msg: msg, msgType: 1 });
try {
ws.send(sendJosn);
} catch (e) {
console.info(e);
}
}
$(function () {
$("#sendbt").click(function () {
var text = $("#content").val();
sendMsg(text, "1")
$("#content").val("");
})
$("#changebt").click(function () {
sendMsg(text, "2")
})
})
</script>
</html>

【websocket-sharp】使用的更多相关文章

  1. C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析

    看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...

  2. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  3. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  4. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  5. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  6. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  7. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  8. Cowboy 开源 WebSocket 网络库

    Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...

  9. 借助Nodejs探究WebSocket

    文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...

  10. 细说websocket - php篇

    下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...

随机推荐

  1. IOS第三方之SVProgressHUD

    这个第三方和MBProgressHUD差不多,也挺简单的. // // ViewController.m // ProgressHUD // // Created by City--Online on ...

  2. vue-router参数传递

    1.在vue-router中,有两大对象被挂载到了实例this2.$route(只读.具备信息的对象).$router(具备函数功能)3.查询字符串方式传递参数 1).去哪里 <router-l ...

  3. wcf win7+iis7 异常消息为: 可能证书“CN=PmsWcfServer”没有能够进行密钥交换的私钥

    原因是证书没有用户权限,解决方法: 1.开始-运行-mmc 2.添加[证书]管理单元 3.选择[证书(本地计算机)]-[个人]-[证书],右击PmsWcfServer证书-[所有任务]-[管理密钥] ...

  4. 【转】sql server日期比较

    1. 当前系统日期.时间select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值例如:向日期加上2天select dateadd(day ...

  5. subltime快捷键

    subltime 是一款快速开发各种文档的软件,本文主要介绍使用编写HTML,文章末尾提供绿色版安装包下载工具 A快捷键说明 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctr ...

  6. 对于移动端浏览器touch事件的研究总结(4)判断手指滑动方向

    最近有一些微信的项目,虽然页面很简单,但配合手势后的效果却是很不错的.最基本的效果就是手指向上滑,页面配合css3出现一个展开效果,手指向下滑将展开的内容按原路径收起.其实就是一个简单的判断手指滑动方 ...

  7. Differences between page and segment

    https://techdifferences.com/difference-between-paging-and-segmentation-in-os.html how does paging so ...

  8. scss-函数

    在scss中除了可以定义变量,具有@extend和@mixins等特性之外,还自备了一系列的函数功能. scss本身带有大量的内置函数,具体可以参阅官网函数模块. 一.字符串函数 unquote($s ...

  9. css points

    <style type="text/css" rel="stylesheet">.a{ width:500px; height:400px;对放置图 ...

  10. CentOS7系列--5.3CentOS7中配置和管理Kubernetes

    CentOS7配置和管理Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将D ...