一 介绍

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. win7 iis7 asp.net 编译器错误消息: CS0016:

    编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/root ...

  2. 快速安装.net 4.0

    1.打开运行输入 cmd 2.输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 3.输入 aspnet_regiis.exe -i

  3. Linux root用户不能通过SSH连接的问题

    http://jingyan.baidu.com/article/fd8044fad48fc95031137a85.html 最近在虚拟机安装Ubuntu之后,通过普通ssh远程连接的时候明明输入了正 ...

  4. 手把手教你写一个java的orm(完)

    生成sql:select 上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就 ...

  5. Q:链表的中间元素

    问题:如何得到一个链表的中间元素?   相信,这个问题对于刚入门编程的人来说,都不会难,最自然而然的想法是先遍历一遍链表,统计链表中的元素的个数,之后,再走一遍链表,所走的步长为链表长度的一半.这样就 ...

  6. C#观察者模式的应用与思考

    1:项目场景 在设计数据表的时候有时候为了将来统计或查询的方便,我们会冗余一些字段.如有三张数据表,学校信息表.班级动态表.班级信息表. 班级动态由学校老师所发,可以进行评论点赞等操作,为了提升这种非 ...

  7. 在vue中子组件修改props引发的对js深拷贝和浅拷贝的思考

    不管是react还是vue,父级组件与子组件的通信都是通过props来实现的,在vue中父组件的props遵循的是单向数据流,用官方的话说就是,父级的props的更新会向下流动到子组件中,反之则不行. ...

  8. LOJ#6032. 「雅礼集训 2017 Day2」水箱

    传送门 首先可以有一个平方复杂度的 \(DP\) 设 \(f_{i,j}\) 表示前面 \(i\) 个小格,高度为 \(j\) 的最大答案 令 \(h_i\) 表示隔板 \(i\) 的高度 当 \(j ...

  9. AJAX-XMLHttpRequest和本地文件

    网页中可以使用相对URL的能力通常意味着我们能使用本地文件系统来开发和测试HTML,并避免对Web服务器进行不必要的部署. 然而当使用XMLHttpRequest进行Ajax编程时,这通常是不行的. ...

  10. ul制作导航菜单

    首先上图,最终效果: HTML代码: <!DOCTYPE html><html> <head> <meta charset="utf-8" ...