Fleck WebSocket使用

本文档展示了如何使用Fleck库在C#中实现WebSocket服务端,并创建一个简单的Asp.net Web应用作为客户端。服务端通过OnOpen、OnClose、OnMessage事件监听连接状态,接收并发送消息。客户端则通过JavaScript创建WebSocket连接,实现消息的发送和接收。这种技术适用于实时通信场景。
摘要由CSDN通过智能技术生成

作为笔记存储.

最近公司有这方面的使用需求。在网上查了一些资料后。得到了想要的结果。以下记录摘抄至网上资料

1.首先,服务端。项目NuGet直接引用Fleck类库。

code:

复制代码

 1             //客户端url以及其对应的Socket对象字典
 2             IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();
 3             //创建
 4             //本地测试的配置IP和端口。自行设置
 5             WebSocketServer server = new WebSocketServer("ws://127.0.0.1:8002");
 6             //出错后进行重启
 7             server.RestartAfterListenError = true;
 8 
 9             //开始监听
10             server.Start(socket =>
11             {
12                 socket.OnOpen = () =>   //连接建立事件
13                 {
14                     //获取客户端网页的url
15                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
16                     dic_Sockets.Add(clientUrl, socket);
17                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");
18                 };
19                 socket.OnClose = () =>  //连接关闭事件
20                 {
21                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
22                     //如果存在这个客户端,那么对这个socket进行移除
23                     if (dic_Sockets.ContainsKey(clientUrl))
24                     {
25                         //注:Fleck中有释放
26                         //关闭对象连接 
27                         //if (dic_Sockets[clientUrl] != null)
28                         //{
29                         //dic_Sockets[clientUrl].Close();
30                         //}
31                         dic_Sockets.Remove(clientUrl);
32                     }
33                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");
34                 };
35                 socket.OnMessage = message =>  //接受客户端网页消息事件
36                 {
37                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
38                     //socket.ConnectionInfo.Headers["UserId"] = message;
39                     string key = message.Replace("UserId=", "");
40                     dic_Sockets.Add(key, socket);
41                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);
42                 };
43             });
44 
45             Console.ReadKey();
46             foreach (var item in dic_Sockets.Values)
47             {
48                 if (item.IsAvailable == true)
49                 {
50                     item.Send("服务器消息:" + DateTime.Now.ToString());
51                 }
52             }
53 
54 
55 
56 
57             Console.ReadKey();
58 
59             //关闭与客户端的所有的连接
60             foreach (var item in dic_Sockets.Values)
61             {
62                 if (item != null)
63                 {
64                     item.Close();
65                 }
66             }
67 
68             Console.ReadKey();

复制代码

 

2.客户端,直接建立一个Asp.net的一个Web空应用程序。在项目内直接新建一个Html文件

code:

复制代码

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Fleck WebSocket</title>
    <style>
        .div1 {
            height: 88px;
            width: 173px;
            border: 1px solid blue;
            margin: auto;
        }

        h4 {
            margin: auto;
        }
    </style>
    <script>
        var webSocket = {};
        //创建websockt
        function CreateWebSocket() {
            webSocket = new WebSocket("ws://127.0.0.1:8002");
            webSocket.onopen = WebSokectOnOpen;
            webSocket.onmessage = WebSocketOnMessage;
            webSocket.onclose = WebSocketOnClose;
        };

        //建立连接事件
        function WebSokectOnOpen() {
            //alert("已经打开连接!");
            webSocket.Send("Open");
        };

        //监听事件
        function WebSocketOnMessage(event) {
            //监听来自服务端的数据
            alert(event.data);
        };

        function WebSocketOnClose() {
            //监听来自客户端的数据
            alert('Close');
        };

        //发送事件
        function WebSocketSendMsg() {
            //获取text中的值
            var text = document.getElementById("Text1").value;
            //发送到服务器
            webSocket.send(text);
        };
    </script>
</head>
<body οnlοad="CreateWebSocket()">
    <div class="div1">
        <input type="text" id="Text1" />
        <input type="button" οnclick="WebSocketSendMsg()" value="发送数据至服务端" />
    </div>
</body>
</html>

复制代码

 

3.服务端启动后,可通过OnOpen,OnClose,OnMessage,OnError等监听事件处理不同的业务。该技术用在一些特定的场景还是不错的。

就到这里!

Fleck WebSocket是一个用C#编写的WebSocket库,用于在.NET框架中实现WebSocket通信。它提供了简单易用的接口和事件监听器属性,例如onopen、onerror、onclose和onmessage,用于处理WebSocket的连接和数据传输。通过使用Fleck WebSocket库,您可以方便地在低版本的.NET框架中进行WebSocket通信,并解析传输的数据。根据WebSocket的状态,可以使用readyState属性来判断WebSocket是正在尝试连接、已经建立连接、正在关闭连接还是已经关闭连接。使用Fleck WebSocket库可以大大简化在.NET框架中进行WebSocket通信的代码编写工作,并提供了更好的兼容性和稳定性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C#工作总结(一):Fleck的WebSocket使用](https://blog.csdn.net/ZslLoveMiwa/article/details/80247739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C# Fleck的WebSocket使用](https://blog.csdn.net/chenxi004/article/details/102531865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值