WebSocket-sharp 是一个功能强大的 C# WebSocket 库,支持 WebSocket 客户端和服务器端的实现。它具有以下主要特性:
使用 NuGet Package Manager Console:
PowerShellPM> Install-Package WebSocketSharp.core
C#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}");
}
}
}
}
C#using System.Security.Cryptography.X509Certificates;
var ws = new WebSocket("wss://example.com");
// 设置服务器证书验证
ws.SslConfiguration.ServerCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => {
// 在这里进行证书验证逻辑
return true; // 返回 true 表示证书有效
};
C#var ws = new WebSocket("ws://example.com");
ws.SetCredentials("username", "password", true);
C#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();
}
}
C#using WebSocketSharp.Server;
using WebSocketSharp;
using ErrorEventArgs = WebSocketSharp.ErrorEventArgs;
namespace AppChatServer
{
// 聊天室处理类
public class ChatRoom : WebSocketBehavior
{
private static Dictionary<string, string> _users = new Dictionary<string, string>();
private string _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)
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
return new string(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("服务器已停止");
}
}
}
C#
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();
}
}
}
}
C#var wssv = new WebSocketServer(4649, true); // true 表示使用 SSL
wssv.SslConfiguration.ServerCertificate =
new X509Certificate2("/path/to/cert.pfx", "password");
C#// 客户端启用压缩
ws.Compression = CompressionMethod.Deflate;
// 服务器端忽略压缩请求
public class CompressIgnoredService : WebSocketBehavior
{
public CompressIgnoredService()
{
IgnoreExtensions = true;
}
}
C#var ws = new WebSocket("ws://example.com");
ws.SetProxy("http://proxy.example.com:3128", "username", "password");
C#// 客户端设置 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);
};
});
C#// 设置日志级别
ws.Log.Level = LogLevel.Debug;
// 输出日志
ws.Log.Debug("调试信息");
ws.Log.Info("普通信息");
ws.Log.Error("错误信息");
WebSocket-sharp 提供了丰富的功能和灵活的 API,使其成为构建实时通信应用的理想选择。通过本指南的示例,你可以快速开始使用 WebSocket-sharp 开发各类 WebSocket 应用。
记住要经常查看官方文档以获取最新更新和详细信息。
HTMLhttps://github.com/sta/websocket-sharp
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!