C# fleck websocket使用

1、web页面

复制代码
 1 <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <meta charset="utf-8" />
 4     <title>WebSocket测试</title>
 5     <style>
 6         .div1
 7         {
 8             height:200px;   
 9             width:200px;
10             border:1px solid blue;
11             margin:auto;
12         }
13         h4
14         {
15             margin:auto;
16         }
17     </style>
18     <script>
19         var webSocket = {};
20         //创建websockt
21         function CreateWebSocket() {
22             webSocket = new WebSocket("ws://127.0.0.1:30000");
23             webSocket.onopen = WebSokectOnOpen;
24             webSocket.onmessage = WebSocketOnMessage;
25             webSocket.onclose = WebSocketOnClose;
26         };
27  
28         //建立连接事件
29         function WebSokectOnOpen() {
30             alert("已经打开连接!");
31             webSocket.Send("WebSocketCreate Success!");
32         };
33  
34         //监听事件
35         function WebSocketOnMessage(event) {
36             //监听来自客户端的数据
37             alert(event.data);
38         };
39  
40         function WebSocketOnClose() {
41             //监听来自客户端的数据
42             alert('和服务器断开连接');
43         };
44  
45         //发送事件
46         function WebSocketSendMsg() {
47             //获取text中的值
48             var text = document.getElementById("Text1").value;
49             //发送到服务器
50             webSocket.send(text);
51         };
52     </script>
53 </head>
54 <body οnlοad="CreateWebSocket()">
55     <div class="div1">
56         <h4>CSDN博客</h4>
57         <h4>By:LoveMiw</h4>
58         <input type="text" id="Text1" />
59         <input type="button" οnclick="WebSocketSendMsg()" value="发送数据" />
60     </div>
61 </body>
62 </html>
复制代码

2、服务端C#代码 Nuget添加Fleck的引用,可以创建一个web应用程序

复制代码
 1  //客户端url以及其对应的Socket对象字典
 2             IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();
 3             //创建
 4 
 5             WebSocketServer server = new WebSocketServer("ws://0.0.0.0:30000");//监听所有的的地址
 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                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);
39                 };
40             });
41 
42             Console.ReadKey();
43             foreach (var item in dic_Sockets.Values)
44             {
45                 if (item.IsAvailable == true)
46                 {
47                     item.Send("服务器消息:" + DateTime.Now.ToString());
48                 }
49             }
50             Console.ReadKey();
51 
52             //关闭与客户端的所有的连接
53             foreach (var item in dic_Sockets.Values)
54             {
55                 if (item != null)
56                 {
57                     item.Close();
58                 }
59             }
60 
61             Console.ReadKey();
复制代码
posted @ 2024-06-14 15:55  星畔  阅读(35)  评论(0编辑  收藏  举报