一 介绍

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. Json.Net组件指定/忽略序列化字段属性技巧知识点

    我们在用Json.Net序列化组件序列化类的时候,经常有这样的一个需求:指定被序列化类中的某些字段属性是要忽略的,或者是指定字段属性序列化 比如下面这个类: public class Bar { pu ...

  2. Java - String, Stringbuilder, StringBuffer比较

    http://www.cnblogs.com/zuoxiaolong/p/lang1.html

  3. Hibernate的一对多实例

    一对多在现实生活中很常见,今天做了个Hibernate的一对多的实例,也是个入门过程,写下来跟大家分享. 最重要的是xml配置文件,之前因为把英文"(引号)错误的复制成中文的“”(引号),导 ...

  4. Invoke 和 BeginInvoke 的区别

    在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dot ...

  5. 阿里云服务器被他人通过SSH暴力破解后的安全加固

    背景说明:我登录阿里云服务器控制台时,收到几条安全警告信息. 从图中可以知道,对方的IP地址是47.97.68.118,通过SSH登录方式,登录时用我服务器里的admin用户,然后用穷举法暴力破解ad ...

  6. drupal7 模糊查询接口

    $query->condition('card_no', db_like($batch_no).'%', 'LIKE');

  7. 转:PHP导出excel文件的几种方式

    PHP导出excel文件的几种方式 文章来源:http://www.cnblogs.com/fredshare/archive/2012/10/29/2744243.html 先说说动态生成的内容当作 ...

  8. vue实现上传上删除压缩图片

    <script> import {Config} from '@/config.js' import {mapState} from 'vuex' import {LocalData, t ...

  9. maven 安装下载与配置 代理设置 《解决下载慢问题》

    maven:下载地址http://mirror.bit.edu.cn/apache/maven/maven-3/ 解压之后配置环境 %maven_home%  d:\*****path 中添加 %ma ...

  10. 地图经纬度坐标与屏幕坐标的转换(android版)

    我们在开发GIS系统的时候,首先要解决的就是地图的可视化问题,这个问题的关键就在于如何把地图的坐标转换成屏幕坐标,然后才到渲染着色.标注等.以下以wgs84经纬度坐标为基准,介绍一下地图经纬度坐标与屏 ...