SuperWebSocket實現服務端和WebSocket4Net實現客戶端


SuperWebSocket實現服務端和WebSocket4Net實現客戶端具體實現如下:

SuperWebSocket實現服務端

注:本作者是基於vs2019 enterprise版本,所有項目均為.Net Framwork4.7版本(因為WebSocket需求是.Net Framwork4.0以上版本)

1、新建控制台項目ConsoleAppWebsocketServer,作為服務端,選擇項目右鍵管理Nuget程序包,搜索 SuperWebSocket ,選擇SuperWebSocketNETServer,點擊右側 安裝,

等待安裝完成,安裝完成以后,項目會多出很多引用庫,如下 

 

項目的Program.cs內容如下:

using SuperWebSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace ConsoleAppWebsocketServer
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("服務端");
WebSocketServer webSocketServer = new WebSocketServer();
webSocketServer.NewSessionConnected += WebSocketServer_NewSessionConnected;
webSocketServer.NewMessageReceived += WebSocketServer_NewMessageReceived;
webSocketServer.SessionClosed += WebSocketServer_SessionClosed;
if (!webSocketServer.Setup("127.0.0.1", 1234))
{
Console.WriteLine("設置服務監聽失敗!");
}
if (!webSocketServer.Start())
{
Console.WriteLine("啟動服務監聽失敗!");
}
Console.WriteLine("啟動服務監聽成功!");
Console.WriteLine("按任意鍵結束。。。");
Console.ReadKey();
webSocketServer.Dispose();
}

private static void WebSocketServer_NewSessionConnected(WebSocketSession session)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客戶端:{GetwebSocketSessionName(session)} 加入";
Console.WriteLine($"{msg}");
SendToAll(session, msg);
}

private static void WebSocketServer_NewMessageReceived(WebSocketSession session, string value)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 服務端收到客戶端:{GetwebSocketSessionName(session)}發送數據:{value}";
Console.WriteLine($"{msg}");
SendToAll(session, value);
}

private static void WebSocketServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客戶端:{GetwebSocketSessionName(session)}關閉,原因:{value}";
Console.WriteLine($"{msg}");
SendToAll(session, msg);
}

/// <summary>
/// 獲取webSocketSession的名稱
/// </summary>
/// <param name="webSocketSession"></param>
public static string GetwebSocketSessionName(WebSocketSession webSocketSession)
{
return HttpUtility.UrlDecode(webSocketSession.SessionID);
}

/// <summary>
/// 廣播,同步推送消息給所有的客戶端
/// </summary>
/// <param name="webSocketSession"></param>
/// <param name="msg"></param>
public static void SendToAll(WebSocketSession webSocketSession, string msg)
{
foreach (var item in webSocketSession.AppServer.GetAllSessions())
{
item.Send(msg);
}
}
}
}

 

WebSocket4Net實現客戶端

 2、新建控制台項目ConsoleAppWebsocketClient,作為客戶端,選擇項目右鍵管理Nuget程序包,為了測試SuperWebSocket作為服務端的功能,本文客戶端使用了WebSocket4Net,同樣也可以使用 SuperWebSocket ,本項目選擇WebSocket4Net,點擊右側 安裝,等待安裝完成,安裝完成之后,同樣項目下會多一些引用庫,如下:

 

項目的Program.cs內容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocket4Net;
using System.Threading;

namespace ConsoleAppWebsocketClient
{
class Program
{
public static WebSocket webSocket4Net = null;
static void Main(string[] args)
{
Console.WriteLine("客戶端");
webSocket4Net = new WebSocket("ws://127.0.0.1:1234");
webSocket4Net.Opened += WebSocket4Net_Opened;
webSocket4Net.MessageReceived += WebSocket4Net_MessageReceived;
webSocket4Net.Open();
Console.WriteLine("客戶端連接成功!");
Thread thread = new Thread(ClientSendMsgToServer);
thread.IsBackground = true;
thread.Start();

Console.WriteLine("按任意鍵結束。。。");
Console.ReadKey();
webSocket4Net.Dispose();
}

public static void ClientSendMsgToServer()
{
int i = 88;
while (true)
{
//Console.WriteLine($"客戶端發送數據{i++}");
webSocket4Net.Send($"{i++}");
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}

private static void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e)
{
Console.WriteLine($"服務端回復數據:{e.Message}!");
}

private static void WebSocket4Net_Opened(object sender, EventArgs e)
{
webSocket4Net.Send($"客戶端准備發送數據!");
}
}
}

 

3、測試

為了更好的看到測試效果,又多使用了js客戶端來測試,添加html文件,命名websockettest.html,內容如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="https://www.baidu.com" />
<title>websocket test</title>
<script>
var socket;
function Connect(){
try{
socket=new WebSocket('ws://127.0.0.1:1234');
}catch(e){
alert('error');
return;
}
socket.onopen = sOpen;
socket.onerror = sError;
socket.onmessage= sMessage;
socket.onclose= sClose;
}
function sOpen(){
alert('connect success!');
}
function sError(e){
alert("error " + e);
}
function sMessage(msg){
document.getElementById("msgrecv").value = msg.data;

}
function sClose(e){
alert("connect closed:" + e.code);
}
function Send(){
socket.send(document.getElementById("msg").value);
}
function Close(){
socket.close();
}
</script>
</head>
<body>
<input id="msg" type="text" size = "200" >
<input id="msgrecv" type="text" size = "200">
<button id="connect" onclick="Connect();">Connect</button>
<button id="send" onclick="Send();">Send</button>
<button id="close" onclick="Close();">Close</button>
</body>
</html>

  

4、運行結果

到此位置所有的准備工作都完成了,一個服務端ConsoleAppWebsocketServer,兩個客戶端(ConsoleAppWebsocketClient,websockettest.html),那么接下來運行項目

 解決方案 右鍵,屬性,設置啟動項目如下:

 

 

 啟動服務端ConsoleAppWebsocketServer,客戶端ConsoleAppWebsocketClient之后,再去手動點擊websockettest.html,

運行效果:

 


免責聲明!

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



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