在C#中,使用ClientWebSocket
类来接收数据时,你需要设置一个事件处理程序来处理接收到的数据。以下是一个简单的示例,展示了如何使用ClientWebSocket
接收数据:
using System;
using System.Net.WebSockets;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 创建一个新的WebSocket连接
using (ClientWebSocket webSocket = new ClientWebSocket())
{
// 连接到WebSocket服务器
Uri serverUri = new Uri("ws://your-websocket-server.com");
await webSocket.ConnectAsync(serverUri, CancellationToken.None);
// 发送一条消息到服务器(可选)
string message = "Hello, WebSocket Server!";
byte[] messageBytes = System.Text.Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
// 设置一个事件处理程序来接收数据
webSocket.MessageReceived += (sender, e) =>
{
// 获取接收到的数据
WebSocketReceiveResult result = e.Message.Substring(0, e.Count);
byte[] receivedBytes = new byte[result.Count];
Array.Copy(e.Message.ToArray(), 0, receivedBytes, 0, result.Count);
string receivedMessage = System.Text.Encoding.UTF8.GetString(receivedBytes);
// 处理接收到的数据
Console.WriteLine($"Received message: {receivedMessage}");
};
// 等待连接关闭
byte[] buffer = new byte[1024 * 4];
WebSocketReceiveResult result;
do
{
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.CloseStatus.HasValue)
{
break;
}
} while (!result.CloseStatus.HasValue);
// 关闭WebSocket连接
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
}
}
在这个示例中,我们首先创建一个新的ClientWebSocket
实例,然后连接到WebSocket服务器。接着,我们设置了一个事件处理程序来处理接收到的数据。当接收到数据时,事件处理程序会提取数据并将其转换为字符串。最后,我们等待连接关闭并关闭WebSocket连接。