using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketExample
{
class Program
{
private static readonly CancellationTokenSource cts = new CancellationTokenSource();
static async Task Main(string[] args)
{
string uri = "wss://example.com/socket";
using (ClientWebSocket webSocket = new ClientWebSocket())
{
await webSocket.ConnectAsync(new Uri(uri), cts.Token);
Console.WriteLine("Connected to WebSocket server");
// Start receiving messages
await ReceiveMessages(webSocket);
// Send a message
string message = "Hello, WebSocket!";
byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
await webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, cts.Token);
Console.WriteLine("Message sent: " + message);
// Close the connection
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cts.Token);
Console.WriteLine("Connection closed");
}
}
private static async Task ReceiveMessages(ClientWebSocket webSocket)
{
byte[] receiveBuffer = new byte[1024 * 4];
while (webSocket.State == WebSocketState.Open)
{
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), cts.Token);
if (result.MessageType == WebSocketMessageType.Close)
{
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", cts.Token);
break;
}
else if (result.MessageType == WebSocketMessageType.Text)
{
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
Console.WriteLine("Received message: " + receivedMessage);
}
}
}
}
}
引入命名空间:
System.Net.WebSockets 提供了用于创建和管理 WebSocket 连接的类。System.Text 用于编码和解码字符串。System.Threading 和 System.Threading.Tasks 用于异步操作和任务管理。主程序逻辑:
ClientWebSocket 对象并连接到指定的 WebSocket 服务器。ReceiveMessages 方法接收来自服务器的消息,并在控制台中打印出来。接收消息:
ReceiveMessages 方法中,使用循环不断接收消息,直到连接关闭。异常处理:
上一篇:c# 静态变量
下一篇:c#语言入门
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站