LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# WebSocket-Sharp 完整指南

admin
2024年12月2日 9:48 本文熱度 891

1. 簡介

WebSocket-sharp 是一個功能強大的 C# WebSocket 庫,支持 WebSocket 客戶端和服務器端的實現。它具有以下主要特性:

  • 完全支持 RFC 6455 協議規范

  • 支持客戶端和服務器端實現

  • 支持消息壓縮擴展

  • 支持安全連接(SSL/TLS)

  • 支持 HTTP 認證

  • 支持查詢字符串、Origin 頭和 Cookies

  • 支持 HTTP 代理服務器連接

  • 支持 .NET Framework 3.5 及更高版本

2. 安裝方式

2.1 手動構建

  1. 使用 MonoDevelop 打開 websocket-sharp.sln

  2. 構建 websocket-sharp 項目

  3. 將生成的 websocket-sharp.dll 添加到你的項目引用中

2.2 NuGet 安裝

使用 NuGet Package Manager Console:

PM>?Install-Package?WebSocketSharp.core

3. 客戶端實現

3.1 基礎客戶端示例

internal?class?Program
{

? ?static?void?Main()
? ?
{
? ? ? ?using?(var?ws?=?new?WebSocket("ws://127.0.0.1:4649/echo"))
? ? ? ?{
? ? ? ? ? ?//?連接建立時的處理 ?
? ? ? ? ? ?ws.OnOpen?+=?(sender,?e)?=>?{
? ? ? ? ? ? ? ?Console.WriteLine("連接已建立");
? ? ? ? ? ?};

? ? ? ? ? ?//?接收消息的處理 ?
? ? ? ? ? ?ws.OnMessage?+=?(sender,?e)?=>?{
? ? ? ? ? ? ? ?Console.WriteLine($"收到服務器消息:?{e.Data}");
? ? ? ? ? ?};

? ? ? ? ? ?//?發生錯誤時的處理 ?
? ? ? ? ? ?ws.OnError?+=?(sender,?e)?=>?{
? ? ? ? ? ? ? ?Console.WriteLine($"發生錯誤:?{e.Message}");
? ? ? ? ? ?};

? ? ? ? ? ?//?連接關閉時的處理 ?
? ? ? ? ? ?ws.OnClose?+=?(sender,?e)?=>?{
? ? ? ? ? ? ? ?Console.WriteLine($"連接關閉:?{e.Code}?{e.Reason}");
? ? ? ? ? ?};

? ? ? ? ? ?try
? ? ? ? ? ?{
? ? ? ? ? ? ? ?//?連接到服務器 ?
? ? ? ? ? ? ? ?ws.Connect();

? ? ? ? ? ? ? ?//?等待連接建立 ?
? ? ? ? ? ? ? ?Thread.Sleep(1000);

? ? ? ? ? ? ? ?if?(ws.ReadyState?==?WebSocketState.Open)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Console.WriteLine("正在發送消息...");
? ? ? ? ? ? ? ? ? ?ws.Send("Hello?Server!");

? ? ? ? ? ? ? ? ? ?//?保持連接一段時間以接收響應 ?
? ? ? ? ? ? ? ? ? ?Thread.Sleep(1000);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Console.WriteLine("連接未就緒,當前狀態:?"?+?ws.ReadyState);
? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ?Console.WriteLine("按任意鍵退出...");
? ? ? ? ? ? ? ?Console.ReadKey(true);
? ? ? ? ? ?}
? ? ? ? ? ?catch?(Exception?ex)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?Console.WriteLine($"發生異常:?{ex.Message}");
? ? ? ? ? ?}
? ? ? ?}
? ?}
}

3.2 帶安全連接的客戶端示例

using?System.Security.Cryptography.X509Certificates;

var?ws?=?new?WebSocket("wss://example.com");

//?設置服務器證書驗證
ws.SslConfiguration.ServerCertificateValidationCallback?=?
? ?(sender,?certificate,?chain,?sslPolicyErrors)?=>?{
? ? ? ?//?在這里進行證書驗證邏輯
? ? ? ?return?true;?//?返回?true?表示證書有效
? ?};

3.3 帶認證的客戶端示例

var?ws?=?new?WebSocket("ws://example.com");
ws.SetCredentials("username",?"password",?true);

4. 服務器端實現

4.1 基礎服務器示例

public?class?Echo?:?WebSocketBehavior
{
? ?protected?override?void?OnOpen()
? ?
{
? ? ? ?Console.WriteLine("客戶端已連接");
? ?}

? ?protected?override?void?OnMessage(MessageEventArgs?e)
? ?
{
? ? ? ?Console.WriteLine($"服務器收到消息:?{e.Data}");
? ? ? ?Send(e.Data);?//?回顯消息 ?
? ?}

? ?protected?override?void?OnClose(CloseEventArgs?e)
? ?
{
? ? ? ?Console.WriteLine("客戶端已斷開連接");
? ?}

? ?protected?override?void?OnError(ErrorEventArgs?e)
? ?
{
? ? ? ?Console.WriteLine($"服務器端錯誤:?{e.Message}");
? ?}
}

class?Program
{

? ?static?void?Main()
? ?
{
? ? ? ?//?創建?WebSocket?服務器 ?
? ? ? ?var?wssv?=?new?WebSocketServer("ws://0.0.0.0:4649");

? ? ? ?//?添加?WebSocket?服務 ?
? ? ? ?wssv.AddWebSocketService<Echo>("/echo");

? ? ? ?//?啟動服務器 ?
? ? ? ?wssv.Start();

? ? ? ?Console.WriteLine("WebSocket?服務器已啟動在?ws://0.0.0.0:4649/echo");
? ? ? ?Console.WriteLine("按任意鍵停止服務器...");
? ? ? ?Console.ReadKey(true);

? ? ? ?//?停止服務器 ?
? ? ? ?wssv.Stop();
? ?}
}

4.2 聊天室服務器示例

using?WebSocketSharp.Server;
using?WebSocketSharp;
using?ErrorEventArgs?=?WebSocketSharp.ErrorEventArgs;

namespace?AppChatServer
{
? ?//?聊天室處理類 ?
? ?publicclass?ChatRoom?:?WebSocketBehavior
? ?{
? ? ? ?privatestatic?Dictionary<string,?string>?_users?=?new?Dictionary<string,?string>();
? ? ? ?privatestring?_nickname;

? ? ? ?protected?override?void?OnOpen()
? ? ? ?
{
? ? ? ? ? ?//?從?Context.QueryString?獲取昵稱 ?
? ? ? ? ? ?var?queryString?=?Context.QueryString;
? ? ? ? ? ?_nickname?=?queryString["nickname"]????$"Anonymous_{GetRandomString(4)}";

? ? ? ? ? ?lock?(_users)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?_users[ID]?=?_nickname;
? ? ? ? ? ?}

? ? ? ? ? ?Console.WriteLine($"新用戶加入:?{_nickname}");
? ? ? ? ? ?Sessions.Broadcast($"{_nickname}?加入了聊天室");

? ? ? ? ? ?//?發送當前在線用戶列表 ?
? ? ? ? ? ?var?userList?=?string.Join(",?",?_users.Values);
? ? ? ? ? ?Sessions.Broadcast($"當前在線用戶:?{userList}");
? ? ? ?}

? ? ? ?protected?override?void?OnMessage(MessageEventArgs?e)
? ? ? ?
{
? ? ? ? ? ?Console.WriteLine($"收到消息?from?{_nickname}:?{e.Data}");
? ? ? ? ? ?Sessions.Broadcast($"{_nickname}:?{e.Data}");
? ? ? ?}

? ? ? ?protected?override?void?OnClose(CloseEventArgs?e)
? ? ? ?
{
? ? ? ? ? ?lock?(_users)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?_users.Remove(ID);
? ? ? ? ? ?}

? ? ? ? ? ?Console.WriteLine($"用戶離開:?{_nickname}");
? ? ? ? ? ?Sessions.Broadcast($"{_nickname}?離開了聊天室");

? ? ? ? ? ?//?更新在線用戶列表 ?
? ? ? ? ? ?var?userList?=?string.Join(",?",?_users.Values);
? ? ? ? ? ?Sessions.Broadcast($"當前在線用戶:?{userList}");
? ? ? ?}

? ? ? ?protected?override?void?OnError(ErrorEventArgs?e)
? ? ? ?
{
? ? ? ? ? ?Console.WriteLine($"發生錯誤?({_nickname}):?{e.Message}");
? ? ? ?}

? ? ? ?private?string?GetRandomString(int?length)
? ? ? ?
{
? ? ? ? ? ?conststring?chars?=?"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
? ? ? ? ? ?Random?random?=?new?Random();
? ? ? ? ? ?returnnewstring(Enumerable.Repeat(chars,?length)
? ? ? ? ? ? ? ?.Select(s?=>?s[random.Next(s.Length)]).ToArray());
? ? ? ?}
? ?}

? ?//?服務器主程序 ?
? ?class?Program
? ?{

? ? ? ?static?void?Main()
? ? ? ?
{
? ? ? ? ? ?//?創建?WebSocket?服務器 ?
? ? ? ? ? ?var?wssv?=?new?WebSocketServer("ws://0.0.0.0:4649");

? ? ? ? ? ?//?添加聊天室服務 ?
? ? ? ? ? ?wssv.AddWebSocketService<ChatRoom>("/chat");

? ? ? ? ? ?//?啟動服務器 ?
? ? ? ? ? ?wssv.Start();

? ? ? ? ? ?Console.WriteLine("聊天室服務器已啟動在?ws://0.0.0.0:4649/chat");
? ? ? ? ? ?Console.WriteLine("按任意鍵停止服務器...");
? ? ? ? ? ?Console.ReadKey(true);

? ? ? ? ? ?//?停止服務器 ?
? ? ? ? ? ?wssv.Stop();
? ? ? ? ? ?Console.WriteLine("服務器已停止");
? ? ? ?}
? ?}
}

客戶端

using?WebSocketSharp;

namespace?AppChatClient
{
? ?class?Program
? ?{

? ? ? ?static?void?Main()
? ? ? ?
{
? ? ? ? ? ?Console.Write("請輸入你的昵稱:?");
? ? ? ? ? ?string?nickname?=?Console.ReadLine()?.Trim()????"Anonymous";

? ? ? ? ? ?//?創建WebSocket連接,包含昵稱參數 ?
? ? ? ? ? ?using?(var?ws?=?new?WebSocket($"ws://127.0.0.1:4649/chat?nickname={Uri.EscapeDataString(nickname)}"))
? ? ? ? ? ?{
? ? ? ? ? ? ? ?bool?isConnected?=?false;

? ? ? ? ? ? ? ?//?連接建立時的處理 ?
? ? ? ? ? ? ? ?ws.OnOpen?+=?(sender,?e)?=>
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?isConnected?=?true;
? ? ? ? ? ? ? ? ? ?Console.WriteLine("已連接到聊天室");
? ? ? ? ? ? ? ? ? ?Console.WriteLine("輸入消息按回車發送,輸入?'exit'?退出");
? ? ? ? ? ? ? ?};

? ? ? ? ? ? ? ?//?接收消息的處理 ?
? ? ? ? ? ? ? ?ws.OnMessage?+=?(sender,?e)?=>
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Console.WriteLine(e.Data);
? ? ? ? ? ? ? ?};

? ? ? ? ? ? ? ?//?發生錯誤時的處理 ?
? ? ? ? ? ? ? ?ws.OnError?+=?(sender,?e)?=>
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Console.WriteLine($"錯誤:?{e.Message}");
? ? ? ? ? ? ? ?};

? ? ? ? ? ? ? ?//?連接關閉時的處理 ?
? ? ? ? ? ? ? ?ws.OnClose?+=?(sender,?e)?=>
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?isConnected?=?false;
? ? ? ? ? ? ? ? ? ?Console.WriteLine($"連接已關閉:?{e.Code}?{e.Reason}");
? ? ? ? ? ? ? ?};

? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?//?連接到服務器 ?
? ? ? ? ? ? ? ? ? ?ws.Connect();

? ? ? ? ? ? ? ? ? ?//?消息發送循環 ?
? ? ? ? ? ? ? ? ? ?while?(isConnected)
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ?string?message?=?Console.ReadLine()????"";

? ? ? ? ? ? ? ? ? ? ? ?if?(message.ToLower()?==?"exit")
? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ? ? ? ? ?if?(!string.IsNullOrEmpty(message)?&&?ws.ReadyState?==?WebSocketState.Open)
? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ?ws.Send(message);
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? ? ?//?正常關閉連接 ?
? ? ? ? ? ? ? ? ? ?if?(ws.ReadyState?==?WebSocketState.Open)
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ?ws.Close(CloseStatusCode.Normal);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?catch?(Exception?ex)
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?Console.WriteLine($"發生異常:?{ex.Message}");
? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ?Console.WriteLine("按任意鍵退出...");
? ? ? ? ? ? ? ?Console.ReadKey();
? ? ? ? ? ?}
? ? ? ?}
? ?}
}

4.3 帶安全連接的服務器示例

var?wssv?=?new?WebSocketServer(4649,?true);?//?true?表示使用?SSL
wssv.SslConfiguration.ServerCertificate?=?
? ?new?X509Certificate2("/path/to/cert.pfx",?"password");

5. 高級特性

5.1 消息壓縮

//?客戶端啟用壓縮
ws.Compression?=?CompressionMethod.Deflate;

//?服務器端忽略壓縮請求
public?class?CompressIgnoredService?:?WebSocketBehavior
{
? ?public?CompressIgnoredService()
? ?
{
? ? ? ?IgnoreExtensions?=?true;
? ?}
}

5.2 HTTP 代理支持

var?ws?=?new?WebSocket("ws://example.com");
ws.SetProxy("http://proxy.example.com:3128",?"username",?"password");

5.3 Cookie 處理

//?客戶端設置?Cookie
ws.SetCookie(new?Cookie("session",?"abc123"));

//?服務器端驗證?Cookie
wssv.AddWebSocketService<ChatRoom>("/chat",?
? ?service?=>?{
? ? ? ?service.CookiesValidator?=?(req,?res)?=>?{
? ? ? ? ? ?var?sessionCookie?=?req["session"];
? ? ? ? ? ?return?sessionCookie?!=?null?&&?ValidateSession(sessionCookie.Value);
? ? ? ?};
? ?});

5.4 日志記錄

//?設置日志級別
ws.Log.Level?=?LogLevel.Debug;

//?輸出日志
ws.Log.Debug("調試信息");
ws.Log.Info("普通信息");
ws.Log.Error("錯誤信息");

6. 結語

WebSocket-sharp 提供了豐富的功能和靈活的 API,使其成為構建實時通信應用的理想選擇。通過本指南的示例,你可以快速開始使用 WebSocket-sharp 開發各類 WebSocket 應用。

記住要經常查看官方文檔以獲取最新更新和詳細信息。

https://github.com/sta/websocket-sharp

該文章在 2024/12/2 9:52:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲а∨天堂久久 | 亚洲国产99在线精品一区欲臀 | 亚洲v天堂v手机在线 | 最新国产啪精品视频网站免 | 在线日本v二区不卡中文字幕 | 久草免费福利资源站在线观看 |