C#工作总结(一):Fleck的WebSocket使用

article/2025/10/6 5:39:29

一.引子(Foreword)

      最近公司里面要做窗体和网页交互的功能。网上找了一下资料,这里做一个简单的扩充和整理,部分内容可能是摘自其他博客,这里会注明出处和原文地址供大家和自己日后查阅。

二.基础知识(Foundation)

(1). WebSocket介绍

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

(2).浏览器对WebSocket的支持

浏览器

支持情况

Chrome谷歌浏览器

Chrome version 4+支持

Firefox火狐浏览器

Firefox version 5+支持

IE微软浏览器

IE version 10+支持(我们一般win7自带的是IE11

Safari苹果浏览器

IOS 5+支持

Android Brower安卓浏览器

Android 4.5+支持

(3). WebSocket服务器支持

厂商

应用服务器

备注

IBM

WebSphere

WebSphere 8.0以上版本支持,7.X之前版本结合MQTT支持类似的HTTP长连接

甲骨文

WebLogic

WebLogic 12c 支持,11g以及10g版本通过HTTP Publish支持类似的HTTP长连接

微软

IIS

IIS 7.0+支持

Apache

Tomcat

Tomcat 7.0.5+支持

 

Jetty

Jetty 7.0+支持

(4). Web前端知识概要

<1>. 对象创建(调用WebSocket的构造函数)

  1)函数原型:     

Constructor(DOMString url,[DOMString protocols]);

  2)说明:url为WebSocket服务器的地址,protocols为发起握手的协议名称,为可选择项。

<2>. 接口及函数方法(WebSocket的接口的定义

  1)函数原型:

Interface WebSocket:EventTarget{readonly attribute DOMString url;//readyState状态值Const unsigned short CONNECTING=0;Const unsigned short OPEN=1;Const unsigned short CLOSING=2;Const unsigned short CLOSED=3;readonly attribute unsigned short readyState;readonly attribute unsigned long bufferedAmount;//监听网络状态的事件监听器属性[TreatNonCallableAsNull] attribute Function? onopen;[TreatNonCallableAsNull] attribute Function? onerror;[TreatNonCallableAsNull] attribute Function? onclose;readonly attribute DOMString extensions;readonly attribute DOMString protocol;//关闭网络连接的方法void close([Clamp] optional unsigned short code,optional DOMString reason);//接受服务器消息的事件监听器函数[TreatNonCallableAsNull] attribute Function? onmessage;attribute DOMString binaryType;void send(DOMString data);void send(ArrayBuffer data);void send(Blob data);
};

  2)说明:

        【1】. 两个方法:

            ● send():向远程服务器发送数据

            ● cosle():关闭该WebSocket


        【2】. 个重要的事件监听器属性:

            ● onopen:WebSocket建立网络连接的时候触发该事件

            ● onerror:当网络连接出现问题的时候触发该事件

            ● onclose:WebSocket被关闭的时候触发该事件

            ● onmessage:当WebSocket接受到远程服务器的数据的时候触发该事件


                    注意:1. 上面的四个函数名均为小写,大小写时敏感的;
                              2. onmessage 绑定一个型为 function(event){} 的函数这样就可以通过event.data来获得返回的数据;


        【3】. readyState属性,用于返回WebSocket所处的状态:

            ● CONNECTING(数值0):WebSocket正在尝试与服务器建立连接

            ● OPEN(数值1):WebSocket与服务器已经建立连接

            ● CLOSING(数值2:WebSocket正在关闭与服务器的连接

            ● CLOSED(数值3:WebSocket已经关闭了与服务器的连接


<3>. 使用WebSocket4

  1) 将相关的定义函数绑定到上面4个监听事件中;

  2) 调用WebSocket的构造函数,给定一个url来初始化一个WebSocket对象;

  3) 通过send()方法来发送数据;

  4) 在有必要的时候可以用close()来关闭监听;


(4).客户端知识概要

<1>. 梗概

        我们可以通过基础的Socket通信来实现和网页的相互通信。但由于只有在.net Framework4.5以及4.5以上的版本对WebSocket通信的数据解析才有相关的类来支持。所以解析数据写起来十分的繁琐,所以我们使用第三方的库来完成低版本.net框架中的通信。如果有时间我也会写一篇有关socket来进行通信及解析数据的文章。

        下来我看看用的软件和相关的技术知识。

<2>. .Net不同WebSocket库的比较

         我这里找了一下网上的资料,如下链接,如果仅仅是要从网页发送消息到服务器,那么我这边使用Flerk。

               ● 英文版:WebSocket libraries comparison

          ● 翻译版:.NET的WebSocket开发包比较【已翻译100%】


<3>. Fleck的源码下载以及说明文档

        源码可以从网上下载,这里我给出链接:源码下载

         点击页面中的Clone or download ->  Download ZIP,如下

图一

        说明文档就在下载的下面,是英文版的的,当然也可以看我博客中的译文:博主翻译版说明文档 (觉得不错的话转载一下哟:-》)

一.引子(Foreword)

        对于怎么使用直接看说明文档,非常简单,这里博主就不多说了。(博主都写到晚上1点了T T)


三.代码(Code)

(1). Web网页端代码

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="utf-8" /><title>WebSocket测试</title><style>.div1{height:88px;   width:173px;border:1px solid blue;margin:auto;}h4{margin:auto;}</style><script>var webSocket = {};//创建websocktfunction CreateWebSocket() {webSocket = new WebSocket("ws://127.0.0.1:30000");webSocket.onopen = WebSokectOnOpen;webSocket.onmessage = WebSocketOnMessage;webSocket.onclose = WebSocketOnClose;};//建立连接事件function WebSokectOnOpen() {alert("已经打开连接!");webSocket.Send("WebSocketCreate Success!");};//监听事件function WebSocketOnMessage(event) {//监听来自客户端的数据alert(event.data);};function WebSocketOnClose() {//监听来自客户端的数据alert('和服务器断开连接');};//发送事件function WebSocketSendMsg() {//获取text中的值var text = document.getElementById("Text1").value;//发送到服务器webSocket.send(text);};</script>
</head>
<body οnlοad="CreateWebSocket()"><div class="div1"><h4>CSDN博客</h4><h4>By:LoveMiw</h4><input type="text" id="Text1" /><input type="button" οnclick="WebSocketSendMsg()" value="发送数据" /></div>
</body>
</html>
(2). 服务端C#代码
//上面是程序生成的using
using Fleck;namespace WebSocketTest
{class Program{static void Main(string[] args){//客户端url以及其对应的Socket对象字典IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();//创建WebSocketServer server = new WebSocketServer("ws://0.0.0.0:30000");//监听所有的的地址//出错后进行重启server.RestartAfterListenError = true;//开始监听server.Start(socket =>{socket.OnOpen = () =>   //连接建立事件{//获取客户端网页的urlstring clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;dic_Sockets.Add(clientUrl, socket);Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");};socket.OnClose = () =>  //连接关闭事件{string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;//如果存在这个客户端,那么对这个socket进行移除if (dic_Sockets.ContainsKey(clientUrl)){//注:Fleck中有释放//关闭对象连接 //if (dic_Sockets[clientUrl] != null)//{//dic_Sockets[clientUrl].Close();//}dic_Sockets.Remove(clientUrl);}Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");};socket.OnMessage = message =>  //接受客户端网页消息事件{string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);};});Console.ReadKey();foreach (var item in dic_Sockets.Values){if (item.IsAvailable == true){item.Send("服务器消息:" + DateTime.Now.ToString());}}Console.ReadKey();//关闭与客户端的所有的连接foreach (var item in dic_Sockets.Values){if (item != null){item.Close();}}Console.ReadKey();}}
}


四. 结束语(Ending)

(1). 在Fleck上面下载的源码在放到工程中的时候似乎会报错,只要重新把所有的.cs按它原来的结构添加到一个新的工程中在编译就可以通过;

(2). 本文主要是用作记录成长历程的,还有这个WebSocket实践性比较强,所以还是要自己动手去试试。所以博客主由于在时间精力不是很的情况下就不去过多的强调代码了。如果真的需要可以下载我上面代码的原工程。最后我把Fleck的包也给一下吧。

工程源代码(环境vs2015)

Fleck源代码

(3).如果本文给您有什么作用的话,转发一下或给一个赞都是给我极大的支持。我排版包括那个头上的图片,都花了很多的经历去制作和整理出来的。如果要转载本文,请注明出处。晚安。2018年5月9日,凌晨。




one love for coding


http://chatgpt.dhexx.cn/article/JDBpoFwS.shtml

相关文章

Fleck说明文档翻译

CSDN ZslLoveMiwa的博客 Fleck Fleck是一个在C#中的WebSocket服务器端的一个实现.。分支自Nugget项目, Fleck不需要任何的继承、容器亦或是需要增加的引用就可以使用。 实例 下面是一个把客户端网页发来的消息回发到客户端的服务器程序。 var server new WebSocketServer(&q…

fleck 客户端_C#中使用Fleck实现WebSocket通信简例

Fleck是一个开源的使用C#封装的WebSocket服务端工具库。 一、服务端搭建 这里选择在.net core 2.1框架下新建了一个控制台程序 在项目里使用NuGet引入Fleck包 NuGet引入Fleck包 其它方式也可以,最终引入项目里都是Fleck.dll Fleck.dll 二、服务端实例 Github上的简单例子: 简…

Fleck WebSocket使用

作为笔记存储. 最近公司有这方面的使用需求。在网上查了一些资料后。得到了想要的结果。以下记录摘抄至网上资料 1.首先,服务端。项目NuGet直接引用Fleck类库。 code: 1 //客户端url以及其对应的Socket对象字典2 IDictionary<string, IWebSocket…

车牌识别技术原理

车牌识别技术原理 车牌识别技术原理都是一样的&#xff0c;具体流程如下&#xff1a;图像捕捉与获取、车牌定位、字符分割字符识别、输出结果。不一样的是在上述环节中采用不同的技术&#xff0c;比如作为核心技术的车牌定位&#xff0c;就可能用到(1)自适应边界搜索法、(2)区…

python实现车牌识别

原始图象 代码 from hyperlpr import HyperLPR_plate_recognition import cv2 from PIL import ImageFont, ImageDraw, Image import numpy as npimage cv2.imread("car.jpg")#读入图片 resultHyperLPR_plate_recognition(image)#识别车牌 plate result[0][0] #…

基于形态学处理的车牌提取,字符分割和车牌识别算法matlab仿真

目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下&#xff1a; 2.MATLAB核心程序 ........................................................................... figure(8);subplot(3,2,2),imshow(d…

车牌识别算法介绍与实践

汽车牌照自动识别整个处理过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块&#xff0c;其中字符识别过程主要由以下3个部分组成&#xff1a; ①正确地分割文字图像区域&#xff1b; ②正确的分离单个文字&#xff1b; ③正确识别单个字符。 用MATLAB软件编…

基于android的车牌识别程序,基于Android平台车牌识别算法,实现手机识别车牌

原标题:基于Android平台车牌识别算法,实现手机识别车牌 近年来,随着移动行业的爆发式发展,手机配置不断提高,基于手机平台的信息采集、图像处理、数据传输等方面的研究也成为了热点,这使得基于手机平台上的车牌识别成为可能。传统的车牌识别系统一般都基于固定的桌面平台…

【车牌识别】基于HOG特征提取和GRNN网络的车牌识别算法matlab仿真

1.软件版本 matlab2017b 2.系统原理 从图的算法流程图可知&#xff0c;基于车牌图像字符特征提取和神经网络的识别算法其首先将训练样本数据进行预处理&#xff0c;得到质量较高的样本数据&#xff0c;然后对这些样本数据进行HOG特征提取&#xff0c;再将特征数据通过神经网络…

【XLPNet车牌识别算法】第二章 检测部分-算法篇1

【XLPNet车牌识别算法】第二章 检测部分-算法篇1 1. XLPNet检测算法前言2. XLPNet检测算法详解2.1 起源2.2 算法细节2.1 算法命名2.2 数据集2.3 预备知识2.4 核心&#xff1a;旋转高斯分布&#xff08;Rotated Gaussian Distribution&#xff09;2.4.1 基于高斯策略的样本分配2…

车牌识别算法 基于yolov5的车牌检测+crnn中文车牌识别 支持12种中文车牌识别

yolov5 车牌识别算法&#xff0c;支持12种中文车牌类型 基于yolov5的车牌检测 车牌矫正以及 基于CRNN的车牌识别 1.单行蓝牌 2.单行黄牌 3.新能源车牌 4.白色警用车牌 5 教练车牌 6 武警车牌 7 双层黄牌 8 双层武警 9 使馆车牌 10 港澳牌车 11 双层农用车牌 12 民航车牌 效果如…

大陆车牌识别算法的背景与技术

我们写过一些关于车牌识别的相关算法发展&#xff0c;随着近两年车牌识别技术的发展、车牌类型的变化以及识别标准的规范化&#xff0c;我们重新梳理了关于大陆车牌识别的技术以及相关背景。文章主要分为三个部分&#xff0c;首先回顾一下目前大陆车牌的种类&#xff0c;第二部…

车牌识别调研总结

来自巴西阿雷格里港大学的学者发表于ECCV2018的论文 http://url.cn/5tnTl9p 《License Plate Detection and Recognition in Unconstrained Scenarios》&#xff0c;给出了一整套完整的车牌识别系统设计&#xff0c;着眼于解决在非限定场景有挑战的车牌识别应用&#xff0c;其性…

超高效车牌识别算法

核心参考文献 陈进 《车牌识别系统关键技术的研究》 文章相关下载资源 算法动态库 https://download.csdn.net/download/hobbitdream/10549960 演示工程 https://download.csdn.net/download/hobbitdream/10549965 算法基本实现原理 整个车牌识别算法包括两个部分&#x…

车牌识别算法实践(一):先验知识

一般来说&#xff0c;一个完整的车牌识别系统的处理流程包括图像输入、车牌提取、字符分割、字符识别和结果输出这五部分。其中车牌提取、字符分割和字符识别是较重要的部分&#xff0c;而车牌提取尤为关键&#xff0c;采用哪种算法或算法组合决定了整个系统的性能。 本人从多年…

基于matlab车牌识别算法

牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等&#xff0c;其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某…

【毕业设计】深度学习 YOLO 实现车牌识别算法

文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往…

LPRNet车牌识别算法?其实没有想象那么难

在停车场、小区的出入口&#xff0c;高速公路收费站&#xff0c;我们经常看到自动识别车辆车牌信息的机器&#xff0c;那么车牌识别是如何工作的呢&#xff1f;车牌识别系统应用主要用于记录车辆的车牌号码&#xff0c;出入时间&#xff0c;可实现自动化、规范化管理&#xff0…

车牌识别算法 matlab,车牌识别算法及其MATLAB实现

一.算法 读取拍摄图像-->截取车牌部分 --> 识别车牌 图像预处理: 将图像经过图像灰度化、图像增强、边缘提取、二值化等操作&#xff0c;转换成便于车牌定位的二值化图像&#xff1b; 车牌定位: 利用车牌的边缘、形状等特征&#xff0c;再结合Roberts 算子边缘检测、数字…

【最强最全车牌识别算法】支持13种中文车牌识别的云端API部署(可直接获取源码使用)

项目简介 在城市交通管理、视频监控、车辆识别和停车场管理中车辆检测与车牌识别是一项富有挑战而重要的任务。利用深度学习识别不同条件下的车辆及其车牌信息。更具体地说&#xff0c;实时目标检测网络&#xff08;Yolov5&#xff09;用于从车辆图像中提取特征并且通过训练对…