C# WebSocket 演示(使用 websocket-sharp 库)
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得客户端和服务器之间可以相互发送消息,而无需不断地重连。WebSocket 在实时应用程序中非常有用,比如聊天应用、在线游戏或者实时数据更新等。而在 C# 中,可以使用 websocket-sharp
这个开源库来快速实现 WebSocket 客户端和服务器。
安装 websocket-sharp
在开始之前,我们需要先安装 websocket-sharp
库。可以通过 NuGet 包管理器来安装。在 Visual Studio 中,可以使用以下命令:
Install-Package websocket-sharp
WebSocket 服务器示例
首先,我们来创建一个简单的 WebSocket 服务器。我们需要引用 websocket-sharp
库,并创建一个服务器类。
using System;
using System.Collections.Generic;
using System.Net;
using WebSocketSharp;
using WebSocketSharp.Server;
public class Chat : WebSocketBehavior
{
protected override void OnMessage(MessageEventArgs e)
{
Console.WriteLine("收到消息: " + e.Data);
// 将接收到的消息广播给所有连接的客户端
Send("服务器: " + e.Data);
}
protected override void OnOpen()
{
Console.WriteLine("一个客户端连接了");
}
protected override void OnClose(CloseEventArgs e)
{
Console.WriteLine("一个客户端断开了连接");
}
}
class Program
{
static void Main(string[] args)
{
var wssv = new WebSocketServer(IPAddress.Any, 8080);
wssv.AddWebSocketService<Chat>("/chat");
wssv.Start();
Console.WriteLine("WebSocket服务器已启动,等待客户端连接...");
Console.ReadKey();
wssv.Stop();
}
}
这个服务器监听在 8080 端口,任何连接到 /chat
路径的客户端都将被处理。服务会在控制台中显示连接和断开的信息,并会将消息回送给客户端。
WebSocket 客户端示例
接下来,我们来实现一个简单的 WebSocket 客户端。客户端会连接到刚刚创建的服务器,并发送一条消息。
using System;
using System.Threading;
using WebSocketSharp;
class Program
{
static void Main(string[] args)
{
using (var ws = new WebSocket("ws://localhost:8080/chat"))
{
ws.OnMessage += (sender, e) =>
{
Console.WriteLine("收到来自服务器的消息: " + e.Data);
};
ws.OnOpen += (sender, e) =>
{
Console.WriteLine("成功连接到服务器");
};
ws.OnClose += (sender, e) =>
{
Console.WriteLine("与服务器的连接已关闭");
};
ws.Connect();
Console.WriteLine("请输入消息发送到服务器(输入‘exit’退出):");
string message;
while ((message = Console.ReadLine()) != "exit")
{
ws.Send(message);
}
ws.Close();
}
}
}
在这个客户端程序中,我们首先创建一个 WebSocket 实例并连接到服务器。我们设置了三个事件处理程序来处理打开连接、接收消息和关闭连接的事件。用户可以输入消息发送到服务器,输入“exit”可以退出程序。
总结
通过上述的示例代码,我们实现了一个基本的 WebSocket 服务器和客户端。这是一个非常适合实时 Web 应用程序的架构,使用 websocket-sharp
库让我们很容易地处理 WebSocket 通信。实际上,WebSocket 的应用场景非常广泛,包括实时聊天、在线游戏、股票行情更新等。你可以根据自己的需求在这个基础上进行更复杂的功能扩展。