c#--Fleck WebSocket使用 (C#版Websocket實例)

推薦幾篇文章:
WebSocket 實戰
C#版Websocket實例
C#工作總結(一):Fleck的WebSocket使用

1.服務端代碼

using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;

namespace WebSocketTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一步:爲當前項目添加 nutget引用。 工具---nutget包管理器--管理解決方案的nutget程序包
            //第一步:爲當前項目添加 nutget引用。 工具---nutget包管理器--管理解決方案的nutget程序包
            //第一步:爲當前項目添加 nutget引用。 工具---nutget包管理器--管理解決方案的nutget程序包

            //注意:使用實例2之前,先將實例1模塊代碼註釋掉
            //注意:使用實例2之前,先將實例1模塊代碼註釋掉
            //注意:使用實例2之前,先將實例1模塊代碼註釋掉
            //注意:使用實例2之前,先將實例1模塊代碼註釋掉
            //注意:使用實例2之前,先將實例1模塊代碼註釋掉
            #region 實例2
            Console.WriteLine(DateTime.Now.ToString() + "   | 實例2 使用說明:");
            Console.WriteLine("1.先啓動本程序,在打開實例2頁面建立連接。");
            Console.WriteLine("2.注意:本程序可以接收任意次數的客戶端信息,本程序也可以向客戶端發送任意次數的消息");

            FleckLog.Level = LogLevel.Debug;
            var allSockets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://0.0.0.0:7181");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("與客戶端已經連接上 Open!");
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("與客戶端已經斷開連接 Close!");
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send("客戶端 Echo: " + message));
                };
            });


            var input = Console.ReadLine();
            while (input != "exit")
            {
                foreach (var socket in allSockets.ToList())
                {
                    socket.Send("服務端: " + input);
                }
                input = Console.ReadLine();
            }

            #endregion




            //注意:使用實例1之前,先將實例2模塊代碼註釋掉
            //注意:使用實例1之前,先將實例2模塊代碼註釋掉
            //注意:使用實例1之前,先將實例2模塊代碼註釋掉
            //注意:使用實例1之前,先將實例2模塊代碼註釋掉
            //注意:使用實例1之前,先將實例2模塊代碼註釋掉
            #region 實例1

            //Console.WriteLine(DateTime.Now.ToString() + "   | 實例1 使用說明:");
            //Console.WriteLine("1.先啓動本程序,在打開實例1頁面建立連接。");
            //Console.WriteLine("2.注意:本程序可以接收任意次數的客戶端信息,但是本程序只能向客戶端發送一次信息,然後本程序自動關閉。");

            ////客戶端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 = () =>   //連接建立事件
            //    {
            //        //獲取客戶端網頁的url
            //        string 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);
            //    };
            //});

            //string userInput=Console.ReadLine();
            //foreach (var item in dic_Sockets.Values)
            //{
            //    if (item.IsAvailable == true)
            //    {
            //        item.Send("客戶端:【收到】來服務端控制檯程序:" + DateTime.Now.ToString()+"      ,服務端內容:   "+ userInput);
            //    }
            //}
            //Console.ReadLine();

            ////關閉與客戶端的所有的連接
            //foreach (var item in dic_Sockets.Values)
            //{
            //    if (item != null)
            //    {
            //        item.Close();
            //    }
            //}

            //Console.ReadKey();

            #endregion
        }
    }
}

.
.
.

實例2頁面代碼

<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>websocket client</title>
    <script type="text/javascript">
        var start = function () {
            var inc = document.getElementById('incomming');
            var wsImpl = window.WebSocket || window.MozWebSocket;
            var form = document.getElementById('sendForm');
            var input = document.getElementById('sendText');

            inc.innerHTML += "等待連接服務端 connecting to server ..<br/>";

            // create a new websocket and connect
            window.ws = new wsImpl('ws://localhost:7181/');

            // when data is comming from the server, this metod is called
            ws.onmessage = function (evt) {
                inc.innerHTML += evt.data + '<br/>';
            };

            // when the connection is established, this method is called
            ws.onopen = function () {
                inc.innerHTML += '與服務端已經連接上.. connection open<br/>';
            };

            // when the connection is closed, this method is called
            ws.onclose = function () {
                inc.innerHTML += '與服務端已經斷開連接.. connection closed<br/>';
            }

            form.addEventListener('submit', function (e) {
                e.preventDefault();
                var val = input.value;
                ws.send(val);
                input.value = "";
            });

        }
        window.onload = start;
    </script>
</head>
<body>
    <a href="https://www.cnblogs.com/cjm123/p/9674506.html" target="_blank">C#版Websocket實例---原文鏈接</a>
    <a href="http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/" target="_blank">參考資料(介紹的非常詳細全面,推薦)</a>
    <form id="sendForm">
        <input id="sendText" placeholder="輸入消息,回車發送" />
    </form>
    <pre id="incomming"></pre>
</body>
</html>

.
.
.

實例1頁面代碼

<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>WebSocket測試</title>
    <style>
        .div1 {
            height: 200px;
            width: 300px;
            border: 1px solid blue;
            margin: auto;
        }

        h4 {
            margin: auto;
        }
    </style>
    <script>
        var webSocket = {};
        //調用創建websockt方法
        CreateWebSocket();


        //創建websockt
        function 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">
        <a href="https://blog.csdn.net/ZslLoveMiwa/article/details/80247739" target="_blank">C#工作總結(一):Fleck的WebSocket使用--原文鏈接</a>
        <h4>CSDN博客</h4>
        <h4>By:LoveMiw</h4>
        <input type="text" id="Text1" />
        <input type="button" onclick="WebSocketSendMsg()" value="發送數據" />
    </div>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章