下面我们详细讲解“C# WebSocket及时通信协议的实现方法示例”的完整攻略。
1. WebSocket 协议介绍
WebSocket 协议是一种在单个 TCP 连接上进行全双工通信的协议,它可以在客户端和服务器之间建立持久性的连接,以支持双向实时消息传递。它可以通过 HTTP/1.1 中的 Upgrade 头字段和 Connection 头字段来进行开启和关闭。
C# 提供了一个开源的 WebSocket 实现 -- System.Net.WebSockets,我们可以使用它来实现 WebSocket 通信。
2. 实现示例
下面是两个示例,分别演示了客户端和服务器端如何使用 System.Net.WebSockets 来实现 WebSocket 通信。
2.1 WebSocket 客户端示例
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketClientDemo
{
class Program
{
static async Task Main(string[] args)
{
using (ClientWebSocket ws = new ClientWebSocket())
{
// 连接 WebSocket 服务器
Uri serverUri = new Uri("ws://localhost:8080");
await ws.ConnectAsync(serverUri, CancellationToken.None);
// 发送消息
string message = "Hello, WebSocket!";
byte[] bytes = Encoding.UTF8.GetBytes(message);
await ws.SendAsync(new ArraySegment<byte>(bytes), WebSocketMessageType.Text, true, CancellationToken.None);
// 接收消息
byte[] buffer = new byte[1024];
while (true)
{
WebSocketReceiveResult result = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received: {receivedMessage}");
}
}
}
}
}
2.2 WebSocket 服务器示例
using System;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace WebSocketServerDemo
{
class Program
{
static async Task Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/");
listener.Start();
while (true)
{
HttpListenerContext context = await listener.GetContextAsync();
if (context.Request.IsWebSocketRequest)
{
HttpListenerWebSocketContext webSocketContext = await context.AcceptWebSocketAsync(null);
WebSocket webSocket = webSocketContext.WebSocket;
byte[] buffer = new byte[1024];
while (webSocket.State == WebSocketState.Open)
{
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
{
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
}
else
{
string message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received: {message}");
byte[] responseBytes = Encoding.UTF8.GetBytes($"Server received the message: {message}");
await webSocket.SendAsync(new ArraySegment<byte>(responseBytes), WebSocketMessageType.Text, true, CancellationToken.None);
}
}
}
}
}
}
}
在这两个示例中,我们分别创建了 WebSocket 客户端和服务器,通过连接或者等待连接建立来启用 WebSocket 连接。在客户端中,我们向服务器发送一条消息,然后循环接收来自服务器的消息;在服务器端,我们接收客户端的消息,然后给客户端发送一个响应消息。
3. 结语
以上就是 “C# WebSocket及时通信协议的实现方法示例”的完整攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# websocket及时通信协议的实现方法示例 - Python技术站