websocket的C#代碼實現
以下是一個簡單的C# WebSocket代碼示例:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketExample
{
class Program
{
static async Task Main(string[] args)
{
// 建立WebSocket服務器
var listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
Console.WriteLine("WebSocket Server started on port 8080");
while (true)
{
// 等待客戶端連接
var client = await listener.AcceptTcpClientAsync();
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}");
// 開始處理客戶端請求
Task.Run(async () =>
{
// 讀取客戶端的HTTP請求
var stream = client.GetStream();
var buffer = new byte[1024];
var bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
var request = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Request:\n{request}");
// 解析HTTP請求,確定是否為WebSocket請求
if (request.Contains("Upgrade: websocket"))
{
// 回應WebSocket請求
var response = "HTTP/1.1 101 Switching Protocols\r\n" +
"Connection: Upgrade\r\n" +
"Upgrade: websocket\r\n" +
"\r\n";
var responseBytes = Encoding.UTF8.GetBytes(response);
await stream.WriteAsync(responseBytes, 0, responseBytes.Length);
// 開始處理WebSocket連接
var webSocket = new WebSocket(client);
await webSocket.ProcessWebSocketRequest();
}
else
{
// 不是WebSocket請求,關閉連接
client.Close();
}
});
}
}
}
public class WebSocket
{
private readonly TcpClient _client;
private readonly NetworkStream _stream;
public WebSocket(TcpClient client)
{
_client = client;
_stream = _client.GetStream();
}
public async Task ProcessWebSocketRequest()
{
// 讀取WebSocket數據
var buffer = new byte[1024];
var bytesRead = await _stream.ReadAsync(buffer, 0, buffer.Length);
var data = new byte[bytesRead - 6];
Array.Copy(buffer, 6, data, 0, bytesRead - 6);
var message = Encoding.UTF8.GetString(data);
Console.WriteLine($"Received message: {message}");
// 發送WebSocket數據
message = "Hello from the server!";
data = Encoding.UTF8.GetBytes(message);
await _stream.WriteAsync(new byte[] { 0x81, (byte)data.Length }, 0, 2);
await _stream.WriteAsync(data, 0, data.Length);
// 等待下一條WebSocket數據
await ProcessWebSocketRequest();
}
}
}
這個代碼示例演示了如何使用C#建立WebSocket服務器,接受客戶端的WebSocket連接,並處理WebSocket數據。在這個示例中,當客戶端連接到WebSocket服務器時,服務器會回應一個HTTP 101 Switching Protocols消息,表示它接受WebSocket協議。然後,服務器會開始處理WebSocket連接,接受來自客戶端的數據,並回應一些數據。注意,這個示例只是一個簡單的WebSocket實現,實際的WebSocket服務器可能需要更複雜的處理邏輯
原文地址: https://www.cveoy.top/t/topic/fr9w 著作权归作者所有。请勿转载和采集!