C# Fleck的WebSocket使用


(1). Web網頁端代碼 

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

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();
}
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM