推薦幾篇文章:
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>