C#使用WebSocket
时间: 2023-12-07 20:00:41 浏览: 36
C#提供了WebSocket类库,可以方便地实现WebSocket协议的通信。下面是一个简单的示例:
```csharp
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (var client = new ClientWebSocket())
{
var uri = new Uri("ws://localhost:8080/ws");
await client.ConnectAsync(uri, CancellationToken.None);
var sendBytes = new byte[] { 0x01, 0x02, 0x03 };
await client.SendAsync(new ArraySegment<byte>(sendBytes), WebSocketMessageType.Binary, true, CancellationToken.None);
var receiveBuffer = new byte[1024];
while (client.State == WebSocketState.Open)
{
var receiveResult = await client.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
if (receiveResult.MessageType == WebSocketMessageType.Close)
{
await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
}
else
{
var messageBytes = new byte[receiveResult.Count];
Array.Copy(receiveBuffer, messageBytes, receiveResult.Count);
Console.WriteLine($"Received: {BitConverter.ToString(messageBytes)}");
}
}
}
}
}
```
在这个示例中,我们首先创建了一个`ClientWebSocket`实例,并使用`ConnectAsync`方法连接到WebSocket服务器。然后,我们使用`SendAsync`方法发送一个二进制消息。接下来,我们开启一个循环,不断接收来自WebSocket服务器的消息,并将它们打印到控制台上。最后,我们在循环中检查WebSocket的状态,如果状态为`WebSocketState.Open`,则继续接收消息;否则,我们调用`CloseAsync`方法关闭WebSocket连接。
需要注意的是,在实际使用中,我们需要处理`WebSocketException`和`OperationCanceledException`等异常。此外,我们还可以使用`WebSocketReceiveResult.EndOfMessage`属性来检查是否接收到了完整的消息,以及使用`WebSocketCloseStatus`枚举来指定WebSocket关闭的状态码和原因。